簡體   English   中英

素數分解如何保證因子是素數?

[英]How does prime factorization guarantee that the factors will be prime?

在這個特定的代碼中,它如何不是 output 6 1,因為 6 除以 18 沒有余數。

int n = 18;
int[] fact = new int[100];
int[] pow = new int[100];
int d = 0; 

for (int i = 2; i <= n; i++) 
{
    int s = 0;

    while(n % i == 0)
    {
        s++; 
        n /= i;
    } 

    if (s > 0)
    {
        fact[d] = i; 
        pow[d] = s;
        d++; 
    }
}

每個數字要么是素數,要么是素數的倍數。 看: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

如果它不能被一個素數整除,它也不能被那個素數的任何倍數整除 因為 18 可以除以 2 - 4, 6, 8, 10,而其他一切都不需要測試。 由於 19 不能除以 2、4、6、8 和 10 永遠不需要測試。 20 可以被 10 整除,永遠不需要測試。 它已經除以 2,所以我們當時排除了一半可能的數字。

我們本能地排除除數,但通常只針對 2 - 僅測試奇數 - 但您可以更進一步。 由於除法的結果也必須是素數或素數的倍數,我們甚至可以在通過平方根后停止。

你真正需要的是一個完整的素數列表,直到素數> Squarroot(PrimeCandidate)。 沒有從 memory 讀取它,這是我知道的最快的方法。

實際上,我不久前就該主題寫了一些東西,關於檢查素數的 5 種方法: https://social.msdn.microsoft.com/Forums/en-US/85fc2406-d2e9-495a-bea7-e516661f8b40 /primal-issues-multithreading-lists-in-memory-and-checking-for-prime-number?forum=csharpgeneral

暫無
暫無

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

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