算數基本定理與質因數分解

2022-03-28 20:03:24 字數 2380 閱讀 8382

目錄位址

算術基本定理可以表述為:對任意大於 \(1\) 的自然數,若不為質數,則一定能且只能寫成一種有限個質數乘積的形式

或者可以表述為:對 \(\forall n\in n\) 且 \(n>1\) ,對所有的 \(m\) 個小於等於 \(n\) 質數 \(p_\) ,\(\displaystyle n=\prod_^mp_i^,p_i\in prime,c_i\in n\) 存在且唯一存在

我們用歸納法證明:考慮合數 \(n\) ,假設 \(n\) 以內的數要麼都是質數,要麼所有合數都符合上述定理

當 \(n\) 為最小的合數 \(4\) 時,\(n=2\times 2=2^2\) 符合上述定理

其它情況下,因為 \(n\) 為合數,所以一定存在 \(a,b\in n\) 且 \(1使得 \(n=a\times b\)

設一共有 \(m\) 個小於等於 \(n\) 的質數 \(p_\)

由於 \(a因此 \(a\) 符合上述定理

故 \(a\) 可唯一地寫作 \(\displaystyle a=\prod_^p_i^,p_i\in prime,c_i\in n\)

\(\because a

\(\therefore m_a\leq m\)

\(\therefore a\) 可唯一地寫作 \(\displaystyle a=\prod_^p_i^\cdot\prod_^mp_i^0,p_i\in prime,c_i\in n\)

我們令 \(d_i=\begin

ca_i,0

故 \(a\) 可唯一地寫作 \(\displaystyle a=\prod_^mp_i^,p_i\in prime,d_i\in n\)

同理,我們可以將 \(b\) 唯一地寫作 \(\displaystyle b=\prod_^mp_i^,p_i\in prime,e_i\in n\)

因此 \(n\) 可唯一地寫作 \(\displaystyle n=a\times b=\prod_^mp_i^\cdot\prod_^mp_i^=\prod_^mp_i^,p_i\in prime,d_i\in n,e_i\in n\)

令 \(c_i=d_i+e_i\) 因此,證得上述結論

綜上,算術基本定理得證

由算數基本定理,我們得到,乙個大於 \(1\) 的自然數,一定能分解為若干個質數的乘積

下面我們來具體考慮如何劃分:

首先,定理的成立表明:對 \(n\) 以內的 \(m\) 個質數 \(p_\) ,保證 \(n=\prod_^mp_i^,p_i\in prime,c_i\in n\) 這一等式中的 \(c_i\) 都是唯一確定的

因此,將 \(n\) 劃分為質數,即求出 \(c_\)

首先,十分顯然:我們可以花費 \(o(n)\) 的時間篩出 \(n\) 以內的質數,然後乙個乙個去實驗

int prime[maxn],cntprime=0,c[maxn]=;

sieve_prime(int n)

...sieve_prime(n);

int copy=n;

for(int i=1;i<=cntprime;i++)

}

\(n\) 以內的質數個數大概 \(\) 個,每個質因數被除的記憶體迴圈,複雜度為 \(o(\log n)\)

因此,分解的複雜度為 \(o(n)\) ,加上前面篩素數,總複雜度 \(o(n)\)

通過細心觀察可以發現:對於大於等於 \(\sqrt n\) 的質因數,一定不會存在超過乙個

若存在兩個大於等於 \(\sqrt n\) 的質因數,設它們分別為 \(p_a,p_b,p_a\leq p_b\)

單這兩個質因數的乘積 \(p_a\times p_b\leq \sqrt n\times \sqrt n=n\) 就注定了不可能同時是 \(n\) 的因數

因此大於等於 \(\sqrt n\) 的質因數,一定不會存在超過乙個

所以我們只需要花費 \(o(\sqrt n)\) 將 \(\sqrt n\) 以內的質數篩出來,然後重複上述操作

最後得到的如果是 \(1\) ,則代表沒有大於 \(\sqrt n\) 的質因數;否則,剩下的本身就是質因數

int prime[maxn],cntprime=0,c[maxn]=;

sieve_prime(int n)

...sieve_prime( (int)sqrt(n) );//或者在函式裡面改為 i*i<=n

int copy=n;

for(int i=1;i<=cntprime;i++)

}if(copy!=1)

因為 \(\sqrt n\) 以內的質數個數大概 \(}=\),每個質數的複雜度為 \(o(\log n)\)

因此分解的複雜度為 \(o(\sqrt n)\) ,加上篩質數的複雜度

總複雜度 \(o(\sqrt n)\)

質因數分解

題目16 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。程式分析 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完 成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新...

質因數分解

短除法 求乙個數分解質因數,要從最小的質數除起,一直除到結果為質數為止。分解質因數的算式的叫短除法 和除法的性質差不多,還可以用來求多個個數的公因式 求 最大公因數的一種方法,也可用來求 最小公倍數。求幾個數最大公因數 的方法,開始時用觀察比較的方法,即 先把每個數的因數找出來,然後再找出公因數,最...

質因數分解

講乙個數分解為幾個質數相乘的結果 int a maxn 用來存質因數 int b maxn 用來存質因數的個數 int main if n 1 不能忘記這一步操作 輸出 第1種寫法 a a a b b b b c c printf 第一種寫法 for int i 1 i tot i else pri...