▼页尾

[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>
usingnamespace std;

constint 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)
returnfalse;
}
returntrue;
}

int main(){
longlong 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;
return0;
}

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

posted @ 2011-02-22 21:10  xiatwhu  阅读(359)  评论(0编辑  收藏  举报
▲页首
西