[Project Euler] Problem 10

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

求所以小于2,000,000的素数之和 

对于素数,我还是利用第七问中的查表法

我们需要保留在表中的素数是所有小于sqrt(2000000)的素数

也就是小于1415的素数,由于除2外的所以素数都是奇数

且数越大,素数的密度越小

我估计小于1415的素数不大于300个。最后验证为223个

但我们为了确保能装下所有小于1415的素数,我们申请了一个750个长度的数组

当然,这在后来看来是严重浪费的

#include < iostream >
using namespace std;

const int END = 1000 ;

bool isPrime( int init, int table[], int num){
for ( int i = 0 ; i < num; i ++ ){
if (table[i] * table[i] > init)
break ;
if (init % table[i] == 0 )
return false ;
}
return true ;
}

int main(){
long long sum = 2 ;
int num = 1 ;
int primeTable[END] = { 2 };
int init = 3 ;
while (init < 2000000 ){
if (isPrime(init,primeTable,num)){
sum
+= init;
if (init < 1415 ){
primeTable[num]
= init;
num
++ ;
}
}
init
+= 2 ;
}
cout
<< sum << endl;
return 0 ;
}

最后要说明的是,结果超出了 int 和 long 的范围(实际上,32位计算机上 int 和 long 是一样的),我们声明为long long型

你可能感兴趣的:(project)