c++ 在没有任何错误消息的情况下,大型迭代在控制台上没有输出

eqqqjvef  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(138)
int main() {
    int naturalNumber = 2;
    int divider = 0;
    int rest = 1;
    long long int sumOfPrimes = 0;
    while (naturalNumber <= 2000000) {
        divider = naturalNumber;
        while (rest != 0) {
            divider--;
            rest = naturalNumber % divider;
        }
        rest = 1;
        if (divider == 1) {
            sumOfPrimes = sumOfPrimes + naturalNumber;
        }
        naturalNumber++;
    }
    std::cout << sumOfPrimes;
}

为什么在我把循环条件设置为经过200万次迭代之后,和输出没有出现在控制台上。而且我没有收到任何错误消息。当它被设置为小于~100'000次迭代时,它可以工作。这是内存问题还是其他问题?
我试图通过迭代计算所有小于2百万的质数的总和。

hm2xizp9

hm2xizp91#

这是一种非常低效的计算一系列质数的方法,所以最有可能的答案是,它只是花了非常非常长的时间。
如果您知道需要2,000,000以内的所有素数,那么Sieve of Eratosthenes就是您的好朋友。
例如:

int n = 2000000;
std::vector<bool> is_prime(n+1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; i++) {
    if (is_prime[i] && (long long)i * i <= n) {
        for (int j = i * i; j <= n; j += i)
            is_prime[j] = false;
    }
}

long long int sum_primes = 0;
for (int i = 0; i < n; i++) {
    if (is_prime[i]) sum_primes += i;
}

这个过程的复杂度是O(n),而不是O(n^2)。

相关问题