分解正整數的質因數

2021-07-08 21:09:28 字數 1002 閱讀 8829

首先,由算術基本定理可知,任何乙個大於1的正整數,都可以分解成若干個質數的乘積,並且這種乘積的形式是唯一的。

所以,對於整數分解,如果先從最小的質數n=2開始進行分解,如果能整除,就只取商,直到不能除時,n++,然後判斷n是否大於現在的商。如果大於,結束程式。否則繼續迴圈。

核心**很短,只有10行左右。

void prim(unsigned long long m)

endl(std::cout);

}

下面來證明一下演算法的正確性。就是證明輸出的所有數都是m的因子,且它們相乘等於m。 同時,它們都是質數。

由 算術基本定理可知,任何乙個大於1的正整數,都可以分解成若干個質數的乘積,並且這種乘積的形式是唯一的。

首先,通過程式我們直接可知的是,對於輸出的n,一定是m的因子。

其次,由於只有在m可以整除n的時候,才用m /= n; 故當所有的n輸出後,所有的數字相乘 肯定等於m。

最後,這才是難點。證明所有輸出的數字均為質數。

我們用反證法來證明。

假設在所有輸出的因數中,至少存在乙個合數 k。

一方面,由演算法本身可知,在輸出k時,不存在小於k的、且大於1的能被m整除的正整數。

另一方面,由合數的定義可知, 這個合數k可以分解成至少兩個因數的乘積。這兩個因數都是小於k且大於1。對於k的這些因數(至少為兩個),我們隨便取其中的乙個p,我們可知p < k。因為m可以整除k,所以必有m可以整除p。即:存在小於k的、且大於1的正整數p,能被m整除。

矛盾!!故假設不成立。即:輸出的所有因數中,沒有合數。

也就是說,輸出的所有因數全為質數。

ok!演算法的正確性證明完畢。

測試了一下執行時間

程式4 正整數分解質因數

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

將乙個正整數分解質因數

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

Python 練習例項14 正整數分解質因數

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