我必须将所有素数加到2,000,000以下但是我的代码给出了错误的结果(1,179,908,154右边是142,913,828,922),因为它与较低的值完美配合我无法弄清楚是什么问题。
#include <iostream>
using namespace std;
int main(){
unsigned int j, i=2,ans=2, interval=2000000;
while(i<=interval){
i++;
j=2;
while(i!=j){
if(i % j != 0)
j++;
else{
i++; j=2;}
}
if (i>=interval)
break;
cout << i<< endl;
ans+=i;
}
cout << ans;
cin.get();
return 0;
}
答案 0 :(得分:8)
您在今天的大多数计算机上将ans
声称为unsigned int
32位,可以表示从0
到4294967295
的数字,但是所有素数低于200万的总和绝对超过4294967295
,请尝试使用unsigned long long
。
顺便说一句,您使用的算法效率很低,您可以考虑The sieve of Eratosthenes: