因式分解与计算φ(n),d(n),ω(n),σ(n),λ(n)μ(n)

这是基于一个原始的因子分解程序,它使用Brent-Pollard算法和Pollard的p-1算法。它应该对不超过20位的整数有效。
我们将所有小于1000的素数都去掉,留下m作为结果的余因子。如果m<106,则m是素数且因子分解是完全的。如果m>106,我们对m进行米勒检验,以2,3,5,7为基数。如果m没有通过Miller对其中一个基的测试,那么m就是复合的。(计算使用了更高级的Lucas-Lehmer测试。)
如果所有的m都通过了m检验,那么我们就称m为质数准素数.
在m是复合的情况下,我们将m服从Brent-Pollard算法,并希望找到一个非平凡因子。如果成功,重复该程序,直到发现系数m小于106因此素数,或是准素数。
我们继续,直到m被完全分解为素数q与10的幂的乘积<q<106拟素数r[0]的幂,。。。,r[c-1],每个>106.

每一个准素数现在都要经过Selfridge的检验,以确定它的素性。因此,我们对r[i]-1中的每一个应用上述因子分解过程,并再次应用Selfridge检验等。最终,我们应用Selfridge的测试来生成小于10的真素数6。在回溯中,这意味着所有的准素数都已被验证为素数。

在极少数情况下,其中一个准素数实际上是复合的,从而导致Selfridge的测试在某种程度上失败,我们在Miller的测试中添加一个额外的基素数并重构n。

计算如果Brent-Pollard失败,我们使用MPQS(多重多项式二次筛)、Pollard的p-1检验和椭圆曲线方法。
(参见计算数论课程,D.Bressoud,S.Wagon,斯普林格,2000年。)

例如:n=846973255413646627833691。
n不能被任何小于1000的素数整除。同样n>106通过了磨坊主的所有测试;所以n=r[0]是产生的第一个拟素数。
因子r[0]-1给出

r[0]-1=2·32·5·47·65119·r[1]·r[2],

其中r[1]=1922567和r[2]=1599337511是准素数。塞尔弗里奇的测试也通过了。
因子r[1]-1给出

r[1]-1=2·961283

Selfridge的检验表明r[1]是一个素数。
因子r[2]-1给出

r[2]-1=2·5·r[3]

其中r[3]=159933751是拟素数。塞尔弗里奇的测试也通过了。
因子r[3]-1给出

r[3]-1=2·3·54·42649个

Selfridge的检验表明r[3]是一个素数。

因此r[2]是素数,所以r[0]是素数。

这是BCMATH对BC的修改的转换程序.

>1(输入):

上次修改日期:2005年5月20日
返回素数页
返回数论函数页