项目欧拉:素数的总和......为什么这不起作用?

时间:2013-04-28 00:36:45

标签: c++ project solution

我一直得到1179908154的错误答案。起初我把它归咎于我的求和变量是int类型,而不是长。我给了它很长的类型,但我得到了相同的答案。想法?

// Project Euler

// Problem 10

#include <iostream>
#include <cmath>
using namespace std;

void main() 
{

int p = 3;
long sum = 2;
bool isPrime;
for (p; p < 2000000; p++)
{
    isPrime = true;

    for (int i = 2; i <= sqrt(static_cast<double>(p)); i++) // cast into double for sqrt function
    {
        if (p % i == 0)
        {
            isPrime = false;
            break;

        }
    }
    if (isPrime == true)
    {
        cout << p << endl; // show each prime
        sum += p; // add prime to sum 
    }

}
cout << sum << endl; // show sum 

system("pause");

}

3 个答案:

答案 0 :(得分:2)

也许在你的平台上,长期不足以保持价值。试试很长一段时间。

答案 1 :(得分:2)

不要自己写素数发生器,这真的不容易。 只需使用这个http://cr.yp.to/primegen.html,它对项目euler来说真的很好。

答案 2 :(得分:0)

当你在for循环上放置边界时,你应该检查数字直到sqrt(p)+ 1.你可以在计算平方根时得到浮点误差(它可能会略微低估它),所以有可能有一些潜力因素不会在循环中检查。