我必须将所有素数加在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;
}
Run Code Online (Sandbox Code Playgroud)
您正在申报ans
的unsigned int
今天,在大多数机器上,这是32位的,这可以从表示数字0
到4294967295
,但所有质数两万元以下的总和肯定是一路过来4294967295
,尝试使用unsigned long long
来代替.
顺便说一下,你使用的算法是非常低效的,你可以考虑Eratosthenes的筛子:
归档时间: |
|
查看次数: |
149 次 |
最近记录: |