分解n并计算φ(n),d(n),ω(n),σ(n),λ(n)μ(n)

这是基于使用Brent-Pollard算法和Pollard的p-1算法的原始因子分解程序。它应该适用于不超过25位的整数。
我们剔除所有小于1000的素数,留下m作为余数。如果m<106,则m是素数,分解是完全的。如果m>106,我们对m进行基于2,3,5,7的米勒检验。如果m未能通过Miller对其中一个碱基的测试,那么m是复合的。(计算使用了更高的Lucas-Lehmer测试。)
如果m通过了所有垒的米勒测试,那么m很可能是素数,我们称之为准时间.
在m是复合的情况下,我们对m进行Brent-Pollard算法,并希望找到一个非平凡因子。如果成功,重复该程序,直到发现因子m小于106因此prime,or是一个准pretime。
我们继续下去,直到m被完全分解为素数q的幂与10的乘积<q<106和拟时间r[0],…,的幂,。。。,r[c-1],每个>106.

现在,每一个准时间都要接受塞尔弗里奇的测试,以试图建立其素性。因此,我们将上述因式分解程序应用于r[i]-1中的每一个,并再次应用塞尔弗里奇检验等。最终,我们应用塞尔弗雷奇检验只生成小于10的正品素数6在回溯中,这意味着所有的准预时间都被验证为素数。

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

CALC公司如果Brent-Pollard失败,我们使用MPQS(多重多项式二次筛)、Pollard的p-1检验和椭圆曲线方法。
(请参见计算数论课程,D.Bressoud,S.Wagon,Springer 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

塞尔弗里奇的测试表明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

塞尔弗里奇的测试表明r[3]是素数。

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

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

输入n(1>n<1025):

上次修改日期:2005年5月20日
返回素数页
返回数值理论功能页面