【发布时间】:2014-09-30 01:16:37
【问题描述】:
我做了一个程序,它打印低于 400 万的素数之和,它没有给我输出。例如,当我计算低于 1000 的素数时,它工作得很好。那么高迭代有什么问题呢?这是计算某个数下素数之和的函数。
long long is_prime(){
long long i,j,c=0,sum=0;
for(i=2;i<=4000000;i++){
c=0;
for(j=1;j<i;j++){
if(i%j==0) c++;
}
if(c==1) sum+=i ;
}
return sum;
}
谁能帮帮我?
【问题讨论】:
-
可能整数溢出。尝试将所有整数声明为 long
-
sum在 32 位整数中是不够的。 -
这只是需要很长时间。不要直接从1K跳到4M,试试10K和100K,你会发现运行时间在迅速增加。
-
程序实际完成运行需要多长时间?
-
如果 100,000 只需要 2 分钟,那么 4,000,000 应该需要两天多一点。