每個(gè)合數(shù)都可以寫成幾個(gè)質(zhì)數(shù)相乘的形式,其中每個(gè)質(zhì)數(shù)都是這個(gè)合數(shù)的因數(shù),把一個(gè)合數(shù)寫成質(zhì)因數(shù)相乘的形式,叫做分解質(zhì)因數(shù)。如30=2×3×5 。分解質(zhì)因數(shù)只針對(duì)合數(shù)(即除1和它本身外,還有因數(shù)的數(shù))。分解質(zhì)因數(shù)的用途極其廣泛,通過分解質(zhì)因數(shù)可以看出這個(gè)合數(shù)可以被哪些數(shù)整除,合數(shù)與合數(shù)之間公約數(shù)和公倍數(shù)的關(guān)系等。
定義
把一個(gè)合數(shù)分解成若干個(gè)質(zhì)因數(shù)的乘積的形式,即求質(zhì)因數(shù)的過程叫做分解質(zhì)因數(shù)。
分解質(zhì)因數(shù)只針對(duì)合數(shù)。(分解質(zhì)因數(shù)也稱分解素因數(shù))求一個(gè)數(shù)分解質(zhì)因數(shù),要從最小的質(zhì)數(shù)除起,一直除到結(jié)果為質(zhì)數(shù)為止。分解質(zhì)因數(shù)的算式叫短除法,和除法的性質(zhì)相似,還可以用來求多個(gè)數(shù)的公因式。
定理
不存在最大質(zhì)數(shù)的證明:(使用反證法)
假設(shè)存在最大的質(zhì)數(shù)為N,則所有的質(zhì)數(shù)序列為:
設(shè),
可以證明不能被任何質(zhì)數(shù)整除,得出也是一個(gè)質(zhì)數(shù)。
而,與假設(shè)矛盾,故可證明不存在最大的質(zhì)數(shù)。
第二種因數(shù)分解的方法:
1975年,John M. Pollard提出。該算法時(shí)間復(fù)雜度為。詳見參考資料。
編程分解
C#
另一種實(shí)現(xiàn)
pascal
Java
Visual Basic
c語言
實(shí)現(xiàn)一
此代碼因?yàn)橛昧薼ong long int,為C99標(biāo)準(zhǔn),故不可在VC6.0上運(yùn)行。
實(shí)現(xiàn)二
可直接在VC6.0運(yùn)行。
C++
Common Lisp
(defun IS系列坦克prime-number (number)
(let ((num number))
(do ((index 2 (1+ index)))
((>= index num) t)
(if (= 0 (MOD num index))
(return-from is-prime-number nil)))))
(defun 矩陣分解quality-factor (number)
(let ((num number) (prime-list (make-array 10 :fill-pointer 0 :adjustable t)))
(if (IS系列坦克prime-number num)
(progn
(format t "~a~%" num)
(return-from decomposition-quality-factor nil)))
(do ((index 2 (1+ index)))
((>= index num) nil)
(if (is-prime-number index)
(push index prime-list)))
(dolist (value prime-list)
(let ((test-flag nil))
(do ()
(test-flag nil)
(if (= 0 (MOD num value))
(progn
(format t "~a~%" value)
(setf num (/ num value))
(if (IS系列坦克prime-number num)
(progn
(format t "~a~%" num)
(return-from 矩陣分解quality-factor nil))))
(setf test-flag t)))))))
Python 2.x
Python 3.x
Bash Shell
批處理
javascripts
參考資料 >