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

Sha*_*did 6 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;
}
Run Code Online (Sandbox Code Playgroud)

syn*_*gma 4

您正在处理的问题是整数溢出

(signed) long-2147483647在大多数机器上可以具有和之间的值2147483647

我建议您应该使用更大的数据类型,unsigned long long在大多数机器上,它可以保存介于以下之间的值:0to 18446744073709551615(至少 64 位)或uint64_ttype。