簡體   English   中英

在沒有任何錯誤消息的情況下在控制台上獲取 no output 進行大迭代

[英]Getting no output on console for big iteration without any error message

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;
}

為什么我設置循環條件為go,循環200萬次后,console上沒有出現和output。 而且我沒有收到任何錯誤消息。 當它被設置為小於 ~100'000 次迭代時它會起作用。 這是 memory 問題還是其他問題?

我試圖通過迭代計算所有低於 200 萬的素數的總和。

這是計算一系列素數的一種非常低效的方法,所以最有可能的答案是它只需要非常非常長的時間。

如果您知道您需要最多 2,000,000 個素數,那么埃拉托色尼篩法就是您的朋友。

就像是:

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)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM