低于2,000,000的素数总和给出了错误的结果

Zeo*_*137 3 c++ primes

我必须将所有素数加在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)

Yu *_*Hao 8

您正在申报ansunsigned int今天,在大多数机器上,这是32位的,这可以从表示数字04294967295,但所有质数两万元以下的总和肯定是一路过来4294967295,尝试使用unsigned long long来代替.

顺便说一下,你使用的算法是非常低效的,你可以考虑Eratosthenes的筛子: