質因數分解算法

每個 合數 都可以寫成幾個 質數 相乘的形式,這幾個質數就都叫做這個合數的質 因數 。 如果一個質數是某個數的因數,那麼就說這個質數是這個數的質因數。而這個因數一定是一個質數。

質因數 (或 質因子 )在數論裏是指能整除給定正整數的質數。 兩個沒有共同質因子的正整數稱爲 互質 。因 爲1沒有質因子, 1 與任何正整數(包括1本身)都是互質 。 正整數的 因數分解 可將正整數表示爲一連串的質因子相乘,質因子如重複可以 指數 表示。根據 算術基本定理 , 任何正整數皆有獨一無二的質因子分解式。 只有一個質因子的正整數爲質數。就是一個數的約數,並且是質數,比如8=2×2×2,2就是8的質因數。12=2×2×3,2和3就是12的質因數。把一個式子以12=2×2×3的形式表示,叫做分解質因數。16=2×2×2×2,2就是16的質因數, 把一個 合數 寫成幾個質數相乘的形式表示,這也是 分解 質因數 。分解質因數的方法是先用一個合數的最小質因數去除這個合數,得出的數若是個質數,就寫成這個合數相乘形式;若是一個合數就繼續按原來的方法,直至最後是一個質數 。分解質因數的有兩種表示方法,除了大家最常用知道的“短除分解法”之外,還有一種方法就是“塔形分解法”。分解質因數對解決一些自然數和乘積的問題有很大的幫助,同時又爲求最大公約數和最小公倍數做了重要的鋪墊。

計算方法
短除法
求一個數分解質因數,要從最小的質數除起,一直除到結果爲質數爲止。分解質因數的算式的叫 短除法 ,和除法的性質差不多,還可以用來求多個個數的 公因式 :求最大公因數的一種方法,也可用來求最小公倍數。求幾個數最大 公因數 的方法,開始時用觀察比較的方法,即:先把每個數的因數找出來,然後再找出公因數,最後在公因數中找出最大公因數。12與18都可以分成幾種形式不同的乘積,但分成質因數連乘積就只有以上一種,而且不能再分解了。所分出的質因數無疑都能整除原數,因此這些質因數也都是原數的約數。從分解的結果看,12與18都有公約數2和3,而它們的乘積2×3=6,就是 12與18的最大公約數。採用分解質因數的方法,也是採用短除的形式,只不過是分別短除,然後再找公約數和最大公約數。如果把這兩個數合在一起短除,則更容易找出公約數和最大公約數。從短除中不難看出,12與18都有公約數2和3,它們的乘積2×3=6就是12與18的最大公約數。與前邊分別分解質因數相比較,可以發現:不僅結果相同,而且短除法豎式左邊就是這兩個數的公共質因數,而兩個數的最大公約數,就是這兩個數的公共質因數的連乘積。實際應用中,是把需要計算的兩個或多個數放置在一起,進行短除。在計算多個數的最小公倍數時,對其中任意兩個數存在的約數都要算出,其它無此約數的數則原樣落下。最後把所有約數和最終剩下無法約分的數連乘即得到最小公倍數。

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的值,重複執行第一步。


http://www.tuicool.com/articles/Frm6fy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章