项目欧拉10练习

时间:2015-05-31 13:35:37

标签: c++ long-integer

2000000以下所有素数的总和是多少? 总和低于10的例子是2 + 3 + 5 + 7 = 17

我写了这段代码,但仍然得到了错误的答案: 我测试了低于几百的数字,它已经显示了正确的答案。

#include <iostream>
#include <math.h>
using namespace std;

bool isPrime(long n)
{
    if (n < 2)
        return false;
    if (n == 2)
        return true;
    if (n == 3)
        return true;
    int k = 3;
    int z = (int)(sqrt(n) + 1);     // square root the n, because one of the product must be lower than 6, if squared root of 36

    if (n % 2 == 0)
        return false;
    while (n % k != 0)
    {
        k += 2;
        if (k >= z)
            return true;
    }
    return false;
}

long primeSumBelow(long x)
{
    long long total = 0;
    for (int i = 0; i < x; i++)         // looping for times of prime appearing
    {
        if (isPrime(i) == true)
            total += i;
        if (isPrime(i) == false)
            total += 0;
    }
    cout << "fd" << endl;
    return total;
}

int main()
{
    cout << primeSumBelow(20) << endl;
    cout << primeSumBelow(2000000) << endl;

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

total计数器类型正确long long。不幸的是,函数primeSumBelow仅返回long,因此,根据平台,正确计算的结果会在从此函数返回时被截断。