质因数分解的rho以及miller-rabin
一、前言 质因数分解,是一个在算法竞赛里老生常谈的经典问题。我们在解决许多问题的时候需要用到质因数分解来辅助运算,而且质因数分解牵扯到许许多多经典高效的算法,例如miller-rabin判断素数算法,rho启发式搜索质因数分解算法等。在此文里,我要介绍的就是miller-rabin算法以及rho启发式搜索分解算法。 二、算术基本定理 首先,我们得知道,任意一个大于1的自然数都可以分解为有限个质数的乘积。这里因子均为质数,且为正整数。我们把这样的分解成为N的标准分解式。关于算数基本定理的应用有许多,例如可以证明素数无限,定义god,lcm等,在此不一一赘述。有了算数基本定理,我们可以发现计算数论函数,约数和等都是十分方便的,这大大的方便了我们的解题。接下来我们介绍如何来分解质因数。 三、质因数分解的算法 所谓质因数,是某自然数的因素而且这个因素还得是质数。 我们不难想到基本的枚举,即暴力枚举1~n所有数,判断是否能够被n整除且该数是否为质数。大概代码如下: For i:=1 to n do If n mod i=0 then If check(i) then //check为检验i是否为质数的子函数,返回值为boolean Writeln(i); Function check(n:longint):boolean; Var i:longint; begin For i:=2 to n