我必须将所有低于 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;
}

最佳答案

您将 ans 声明为 unsigned int ,在今天的大多数机器上,它是 32 位,它可以表示从 04294967295 的数字,但所有 200 万以下素数的总和肯定超过 4294967295 ,请尝试使用 unsigned long long 代替。

顺便说一句,你使用的算法效率很低,你可以考虑 The sieve of Eratosthenes :

关于c++ - 低于 2,000,000 的素数总和给出错误结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22084060/

10-11 21:53