分解質因數

2021-08-28 19:04:05 字數 1407 閱讀 3616

質數(prime number)又稱素數,有無限個。乙個大於1的自然數,除了1和它本身外,不能被其他自然數整除(除0以外)的數稱之為素數(質數);否則稱為合數。根據算術基本定理,每乙個比1大的整數,要麼本身是乙個質數,要麼可以寫成一系列質數的乘積;而且如果不考慮這些質數在乘積中的順序,那麼寫出來的形式是唯一的。最小的質數是2。

質因數(或質因子)在數論裡是指能整除給定正整數的質數。兩個沒有共同質因子的正整數稱為互質。因為1沒有質因子,1與任何正整數(包括1本身)都是互質。正整數的因數分解可將正整數表示為一連串的質因子相乘,質因子如重複可以指數表示。根據算術基本定理,任何正整數皆有獨一無二的質因子分解式。只有乙個質因子的正整數為質數。綜上所述質因數分解是唯一的。

質因數分解的經典演算法是:

pollard rho因數分解(prime decomposition)

2023年,john m. pollard提出了第二種因數分解的方法,pollard rho快速因數分解。該演算法時間複雜度為o(n^(1/4))。

分解質因數**:

將乙個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。

程式分析:對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完成: 

(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。

(2)如果n<>k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,

重複執行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重複執行第一步。

另外在編寫程式的時候還要用到的乙個定理是:

判斷乙個自然數是否是質數,只用看從2到根號n是否能整除n。也就是說,

乙個合數的最小正因子必小於根號n。
對於上面定理的簡單思考證明:

首先,約數是成對出現的。比如24,你找到個約數3,那麼一定有個約數8,因為24/3=8。

然後,這對約數必須乙個在根號n之前,乙個在根號n之後。因為都在根號n之前的話,

乘積一定小於n(根號nx根號n=n),同樣,都在根號n之後的話,乘積一定大於n。

所以,如果你在根號n之前都找不到約數的話,那麼根號n之後就不會有了。

如果n (n>=2)沒有小於等於根號n,大於1的約數,那麼n必然是質數。

假設n不是質數,並且不含有小於等於根號n的約數。

因為n是合數,那麼n必然可以寫成n=p*q,並且p和q大於1。根據假設,p和q都大於根號n。那麼p*q>n,矛盾

具體程式:

#includeusing namespace std;

int main()

else

i++;

}cout

}return 0;

}

分解質因數

質因數概念 每個合數都可以寫成幾個質數相乘的形式,這幾個質數就都叫做這個合數的質因數。如果乙個質數是某個數的因數,那麼就說這個質數是這個數的質因數。而這個因數一定是乙個質數。演算法原理 先根據需要分解的合數生成乙個質數表。然後依次從小到大依次除合數,每次除之後都將儲存步驟。表達不好,還是看 吧 us...

分解質因數

分解質因數 問題描述 求出區間 a,b 中所有整數的質因數分解。輸入格式 輸入兩個整數a,b。輸出格式 每行輸出乙個數的分解,形如k a1 a2 a3.a1 a2 a3.k也是從小到大的 具體可看樣例 樣例輸入 3 10 樣例輸出 3 34 2 2 5 56 2 3 7 78 2 2 2 9 3 3...

分解質因數

大數的質因數分解一直以來是亟需解決的難題。本文從最基本的試除法開始,分解質因數的方法。下面的程式在開頭定義了乙個巨集opt,如果刪掉這個定義,就可以執行最原始的演算法。一 樸素演算法 include include include using namespace std define opt int...