簡體   English   中英

項目Euler#3 C ++程序崩潰

[英]Project Euler #3 C++ Program Crash

問題指出:

13195的主要因子是5、7、13和29。

什么是600851475143的最大素數?

這是我在C ++中的嘗試

#include <bits/stdc++.h>
using namespace std;

void ProblemThree(long long int n) {
    bool prime[n];
    memset(prime, true, sizeof(prime));
    for (int i = 2; i * i < n; i++) {
        if (prime[i]) {
            if (n % i == 0) {
                printf("d", i);
                for (int k = 2 * i; k <= n; k += i) {
                    prime[k] = false;
                }
            }
        }
    }
}

int main() {
    ProblemThree(600851475143);
}

程序意外崩潰,編譯器未顯示任何錯誤。 為什么會這樣,我如何阻止它發生呢?

由於您嘗試分配的數組太大,導致崩潰。 由於只有一個數字可以測試,因此不需要存儲中間結果,因此可以繼續計算該數字的素因數分解,並采用最大因數。

您可以使用以下算法來計算O(1)空間的解決方案:

long long  maxPrimeFactor(long long n)
{
    long long maxPrimeFactor = 1;
    while (n%2 == 0)
    {
        n = n/2;
        maxPrimeFactor = 2;
    }

    // n must be odd at this point.  So we can skip 
    // one element (Note i = i +2)
    for (int i = 3; i <= sqrt(n); i = i+2)
    {
        while (n%i == 0)
        {
            maxPrimeFactor = max(maxPrimeFactor, i);
            n = n/i;
        }
    }

    if (n > 2){
        maxPrimeFactor = max(maxPrimeFactor, n);
    }

    return maxPrimeFactor;
}

注意:代碼尚未經過測試,但是它可以給出想法,並且仍然可以正常工作。

暫無
暫無

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

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