-3

我正在尝试解决 Project Euler 问题,它希望我找到低于 200 万的素数之和。这是我写的代码:

#include <iostream>
using namespace std;

bool isPrime (int x)
{
    for(int i = 2; i < x; i++)
    {
        if(x % i == 0)
            return false;
    }
    return true;
}
int main ()
{

    int x = 0;
    for(int i = 3 ; i < 2000000;i++)
    {
        if(isPrime(i))
            x = x + i;
    }


cout<<x+2<<endl;
}

我知道这不是解决这个问题的有效方法。我找到了一种更简单的方法,但我认为这个解决方案也应该给出正确的答案。这段代码找到的答案是:1179908154。你能告诉我为什么这段代码给出了错误的答案吗?

4

1 回答 1

3

代码给了你错误的答案,因为你到达了 point x,它的类型int不能代表你的号码。您可以使用其他数据类型unsigned long long吗?这将能够保持它而不会溢出

于 2013-08-25T14:45:32.893 回答