查找间隔之间的素数之和(C ++程序不适用于大数)

时间:2015-05-08 00:40:53

标签: c++

我的代码如下。它的工作完美而间隔不是很大。但是每当我超过一百万时,程序就会停止。例如,对于区间2到2000000,素数之和应该是142913828922(从书的后面),而我的应用程序显示1179908154.有人可以指出我哪里出错了。

#include <iostream>
#include <math.h>
#define BELOW 2000000;

using namespace std;
bool isPrime(int num)
{
    int i;

    for (i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return 0;
        }
        else {
            ;
        }
    }
}

int main()
{
    long sum = 0;
    for (int i = 2; i < BELOW i++) {
        if (isPrime(i)) {
            sum = sum + i;
            printf("sum: %ld\n", sum);
        }
    }

    cin.get();
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您正在处理的问题是integer overflow

大多数计算机上的

(signed) long可以包含-21474836472147483647之间的值。

你应该使用更大的数据类型,我建议unsigned long long,在大多数机器上,它可以保存:018446744073709551615之间的值(至少64位)或{ {1}}输入。

答案 1 :(得分:1)

您应该使用'uint64_t'

替换所有出现的'int'和'long'