我正在尝试解决项目欧拉问题,它希望我找到低于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。你能告诉我为什么这段代码给出了错误的答案吗?
答案 0 :(得分:3)
代码为您提供了错误的答案,因为您到达x
点,int
类型无法代表您的号码。
您可以使用其他数据类型unsigned long long
吗?这将能够保持它而不会溢出