整数因子分解最直观的方法当数“试除法”,数论中的Mertens定理告诉我们76%的奇数都有小于100的素因子,因此对于大多数整数,“试除法”已经足够,但是对于特殊的数,特别是素因子普遍较大的时候,“试除法"的效率便明显不足。
和素数检验类似,目前几乎所有实用的分解方法都是概率性的算法, 目标是找到能计算x 的算法, 使得(x,N) > 1 的概率较大(而最大公因子可以很快地计算).
Pollard p - 1 方法由Pollard 于1974 年提出,用来找到给定合数n的一个因子d.
算法的一个版本大致如下:
common lisp实现:
(defun factorial (n) ;;;阶乘
(setf m 1)
(loop for i from 1 to n do
(setf m (* m i)))
m)