数论知识

数论中一个最基本、最古老而当前仍然受到人们重规的问题就是:

1、判别给定的整数是否素数(简称为素数判别或素性判别)。

2、将大合数分解成素因子乘积(简称为大数分解)。

个人:2中 所谓的大合数,应该不是普通的合数。该合数能分解成素因子的乘积 应该是唯一的。

最直接的素数判别和大数分解方法就是试除法,即对整数n,用2,…,n-1去试除,来判定n是否素数,分解式如何。这个方法是最简单的一个方法,古希腊时就被人所知,但这个方法对较大的数(20位左右)就要耗费很多时间。


素数判定与大数分解    
只有真正读懂斐波那契数列,才会看到造化天地的主宰——大自然女神是如此的美丽。 优化組合研究中,斐波那契数列的重要性和黃金分割留给人类的一个永恒的神话……           

序言
  数论中一个最基本、最古老而当前仍然受到人们重规的问题就是判别给定的整数是否素数(简称为素数判别或素性判别)和将大合数分解成素因子乘积(简称为大数分解)。在历史上,这个问题曾经吸引了包括费马(Fermat)、欧拉(Euler)、勒让德(Legendre)和高斯(Gauss)在内的大批数学家,他们花费了大量的时间和精力去研究这个问题。高斯在其著名的《算术探讨》(《Disquisitiones Arithmeticae》)中称道:“把素数同合数鉴别开来及将合数分解成素因子乘积被认作为算术中最重要最有用的问题之一。”我国的《易经》中也对这个问题作了研究。
  素数判别和大数分解这个问题具有很大的理论价值。因为素数在数论中占有特殊的地位,鉴别它们则成为最基本的问题;而把合数分解成素因子的乘积是算术基本定理的构造性方面的需要。人类总是有兴趣问如下的问题:2131-1是否素数?由23个1组成的数是否素数?怎么分解31487694841572361?对素数判别和大数分解的研究必然会丰富人类的精神财富。更重要的是,素数判别和大数分解具有很大的应用价值。在编码中,需要讨论某类有限域及其上的多项式,这类有限域就是由素数
  在快速数论变换中,要讨论Z/nZ上的卷积运算,就要知道Z/nZ的乘法群的构造,而这就依赖于将n分解成素因子的乘积。下面介绍的RSA公开密钥码体制更加说明了这个问题的两个方面在实际应用中的作用。1977年,艾德利曼(Adleman)、希爱默(Shamir)和鲁梅利(Rumely)发明了一个公开密钥码体制。在这个密码体制中,对电文的加密过程是公开的,但是,你仅知道加密过程而未被告知解密过程则不可能对电文进行解密。他们的体制就是依靠这样一个事实:我们能够很容易地将两个大素数(譬如两个百位素数)乘起来;反过来,要分解一不大整数(譬如200位)则几乎不可能。(关于RSA体制的详细介绍,请参阅文献[1])。因此RSA体制就与素数判别和大数分解有密切联系。首先,要具体建立一个RSA体制就需要两个大素数,因而就涉及到寻找大素数的问题;而RSA体制的破译之可能性就依赖于分解一个大数可能性。于是,RSA体制的建立与破译就等价于素数判别与大数分解问题。近来,由于计算机科学的发展,人们对许多数学分支的理论体系重新用计算的观点来讨论。从计算的观点来讨论数论问题形成了当前很活跃的分支-—计算数论。而素数判别和大数分解成为这一分支的重要组成部分。在这一部分里提出了两个重要的、悬而未决的问题:是否存在判别素数的多项式算法?是否存在分解大整数的多项式算法?已知道“分解整数”这个问题是一个NP完全问题,因此对上面第二个问题的讨论是解决计算机科学中的难题:“NP完全问题是否一定是多项式算法可解的?”的一个突破口。因此,素数判别和大数分解对计算机科学来说也是很有价值的。
  最直接的素数判别和大数分解方法就是试除法,即对整数n,用2,…,n-1去试除,来判定n是否素数,分解式如何。这个方法是最简单的一个方法,古希腊时就被人所知,但这个方法对较大的数(20位左右)就要耗费很多时间。在本世纪四十年代电子计算机出现之前,尽管产生了许多素数判别和大数分解方法,但因为用手算,速度太慢,很多方法在实用中即使对十几位的数也需要好几天,而对更大的数就无能为力了。随着计算机的出现及发展,人们开始用这个有力的工具来研究素数判别和大数分解。到六十年代末期,已产生了许多新方法,历史上的许多方法也得到了应用,使得对四十几位数的素数判别可以很快得到结果。而到七十年代末,数论学家和计算机专家们已深入地研究了这个问题,得到许多实际有效的方法。用这些方法在较好的计算机上判别一个100位数是否素数只需不到一分钟;分解70位左右的整数也是日常工作了。这些成果已引起人们的普遍关注。在这个领域中的研究空前活跃。虽然离问题的彻底解决还很远,但在本领域中已取得了一个又一个的突破。在这方面的研究必有光辉的前景。
  我们写这个小册子的目的是要介绍素数判别和大数分解的发展历史、一般理论、各种方法及最新成果,是想让许多非专业的读者了解这个方向的内容和进展情况。当然,只有在这些定理的证明较为初等而又不太长时,我们才给出其证明。因为这个方向与计算机科学的密切关系,我们还要结合计算量来介绍一些数论中常用的基本算法。
  除了极个别内容,如第二章第七节,本书的绝大部分内容只需要某些初等数论的知识,它们可以在任何一本介绍初等数论的书中都能找到,如文献[1] 。对于广义黎曼猜想,我们写了一则简短的附录。作为“世界数学名题欣赏丛书”中的一本,如果读者在欣赏之余,还打算进一步学习和探讨的话,那么,后面所列的文章和书目,可供参考。
  限于水平,本书的缺点和错误一定不少,我们期待着读者的批评指正。
1.算法及其计算量的概念
   通常,解决问题的方式有两种.其一是对问题的每个对象(也称作输入),直接给出答案,其二是给出一套规则,使得对问题的任何一个对象(输入),解答者可依照这些规则、机械地执行运算,能在有限步内得到答案.这里的第二种方式就是问题的算法解答,这时也称问题是算法可解的,而所给出的规则就称为算法. 
   例 在复数范围内解一元二次方程.这个问题的输入即是具体给出的一元二次方程.任给一个方程种解答方式.
    例 判别任意给出的自然数是否素数.
  熟知,我们没有象上例那样的公式来表明哪个数是素数,哪个数不是素数.但是,我们可以以如下方式解答此问题:对任意给定的数n,用2,3 3,…,n-1去试除n,若其中有一个除尽n,则n不是素数;否则,n是素数.这就是问题的算法解答.注意,算法不可解的问题是存在的.希尔伯特的第十问题就是一个算法不可解的问题.这一点是马递佳塞维奇于1970年证明的.
    对算法可解的问题而言,解答的算法可能很多,我们在实际解决问题时究竟采取哪一种算法呢?这就要求对算法的好坏进行评判.算法的好坏与所谓的计算量有密切关系.人们注意到,对某类问题的解答依赖于一些基本运算.譬如,在排序问题中,比较运算——即比较两个元的先后——是一种基本运算.当然,“互换位置”也可以当作是一种基本运算.一个算法在对问题的某个输入解答所执行的基本运算次数,称为算法对此输入执行的计算量.算法对不同的输入执行的计算量一般不同.在把计算量描述为输入的函数之前,需要对输入给个度量,这就是所谓的输入尺寸.例如,在排序问题中,输入尺寸可定义为待排序的贯的长度.这样一来,计算量可以描述为输入尺寸的函数.算法对问题的所有输入执行的计算量的最大值称为算法在最坏性态下的计算量.如果解决一个问题有两个算法,其中一个算法在最坏性态下的计算量比另一个在最坏性态的计算量少,则称前者在最坏性态下比后者好.若一个问题存在一个算法解,其算法在最坏性态下的计算量是输入尺寸的多项式函数,则称此问题存在多项式算法,也说问题是P问题,否则称它不存在多项式算法.
  最后,我们谈谈概率算法和确定算法。所谓概率算法就是它的某些步骤是要依靠服从某种分布的随机抽样来完成的,这种随机过程应是有限步内可完成的,而且算法得出的结论应与所作的随机抽样无关,利用随机手段仅仅是为了加快算法的进程或为了方便.确定算法是相对于概率算法而言的,即它的每一步骤都是确定的,不须用随机手段就可完成的.以后,这两种算法都会遇上,凡没有用随机手段的都是确定算法,我们将不作特别说明了.
2.数论中的基本算法
   在数论问题中,输入一般是一个或几个自然数.如果输入是一个自然数n,则定义其输入尺寸为它的二进位表示的位数,即〔log2n〕 +1,有时也将log2n作为输入尺寸.熟知,数论问题的解答中,自然数的加减乘除这四则运算是基本的运算,而两个个位数的加法、减法和乘法及两位数除以个位数的除法又最基本.因此,我们如下定义数论问题的基本运算:假如我们是在r-进位制中讨论自然数的运算(通常在十进位下讨论,即r=10;而在计算机上,一般在二进位下讨论,即r=2),则基本运算就是个位数的相加、相减、相乘,两位数除以个位数的除法及向左移位运算(即乘上r).有了基本运算,就可以来讨论数论中的基本算法了. 
   (1)四则运算加法:回忆一下小学里学多位数相加的情景,当时是列竖式再按老师教的规则去演算.这些竖式规则就是算法.我们依照用竖式演算的步骤将其用文字写出来即是:任意给定两个n位的r进位数(如有一个没够n位,可添一些零而达到n位).a=(an-1…a1a0)r=an-1rn-1+an-2rn-2+…+a1r+a0,b=(bn-1…b1b0)r=bn-1rn-1+bn-2rn-2+…+b1r+b0, =c0r+s0,其中0≤s0<r,c0=0或1视a0+b0<r或≥r而定.接着有a1+b1+c0=c1r+s1,0≤s1<r,因为0≤c0≤1,0≤a1,b1≤r-1,故c1=0或1视a1+b1+c0<r或≥r而定,继续对第2,3,……,n-1讨论得,存在c1,si使ai+bi+ci-1=ci·r+si,其中0≤si<r,ci=0或1(i=1,2,…,n-1),最后令cn-1=sn,则


因为由ai,bi,ci-1经带余除法ai+bi+ci-1=cir+si,0≤si<r,ci=0或1确定ci,si至多需要5次基本运算,故用竖式算法计算两个n位数的计算量至多是5n,用O记号即是O(n).在二进位制中,r=2,输入n的位数是〔long2n〕+1,另外,对任意的r>1有〔longrn〕+1=O〔long2n〕,故得到下面的定理.
定理1.1 用竖式算法计算两个不大于n的数相加时,其计算量是O〔long2n〕.

  减法:同加法一样地讨论,只是将a+b、ai+bi等改成a-b,ai-bi,相应地,ci=0或-1视ai-bi+ci-1≥0或≤0而定.我们也可以得到下面的定理.

  定理1.2 用竖式算法计算两个不大于n的数相减时,其计算量是O(log2n).乘法:在用竖式算法作多位数的乘法时,先是做个位数与多位数相乘,然后再移位相加.于是,我们先来讨论个位数与多位数相乘.设

-2,依次有aib0+ci-1=cir+si,其中0≤si<r,因为0≤ai,b0≤r-1,0≤ci-1≤r-2,故0≤aib0+ci-1≤r(r-2)+(r-1),因而0≤ci≤r-2,以上i=1,…,n-1.再令sn=cn-1,则得ab=  


   
因为(a·bi)ri是a·bi的r进位表示式向左移i位,即在a·bi的r进位表示式之后添i个零.因此表达式(1)表示m个数移位相加,这就将多位数乘法归结为多位数与个位数相乘,然后再移位相加.
  注意到,在个位数与多位数相乘时,由ai,bi,ci-1经aibi+ci-1=cir+si,0≤si<r确定ci,si至多需要5次基本运算,故个位数与n位数相乘的计算量至多是5n,而(1)式表明,n位数与m位数相

位数与n+2位数、n+2位数与n+3位数、……、n+m-1位数
式算法做n位数与m位数(m≤n)相乘的计算量不多于13mn.设M(n)表示两个n位数相乘的计算量,则M(n)=O(n2).故可得下面的定理.
定理1.3 竖式算法做两个不超过n的数的相乘时,其计算量是O
带余除法:带余除法的竖式算法要用文字表述出来比先前的加法和乘法都要麻烦,但它只不过是将小学里做带余除法的过程详细地写出来而已,这里不准备重复这些枯燥的叙述,而只将带余除法的竖式算法的计算量写出来.
  定理1.4 用竖式算法作两个不超过n的数的带余除法时,其计
  实际上,我们是得到这样的结论:一个2n位数除以一个n位数所得的商和余数的计算需要计算量O(n2),之后,才有定理1.4.而且由此可得,对一个不超过m2的数a取模m得最小非剩余的计算量是O(log22m).
  关于自然数的乘法,我们还想介绍两个优美的结果,其证明已超出本书的范围.
  定理1.5 任给一个正数ε,无论如何小,都存在一个乘法算法,它做两个n位数相乘的计算量是O(n1+ε),或者说,它做两个不大于n的数相乘的计算量是O(log21+εn).
  定理1.6 存在乘法算法,使其作两个n位数相乘的计算量是O(n·log2n·long2log2n),或者说,它做两个不大于n的数相乘的计算量是O(log2n·log2log2n·log2log2log2n)
  定理1.6中的乘法所需的计算量被认为是作乘法运算的最优计算量,即不存在有更少计算量的乘法算法.[2]
  下面的定理表明,除法所需的计算量与乘法所需的计算量相当,它的证明也不在本书范围内,读者可参见[2]. 
  定理1.7 存在除法算法,它求一个2n位数除以一个n位数得的商和余数所需的计算量是O[M(n)],其中M(n)是做两个n位数乘法所需的计算量.
  尽管定理1.5和定理1.6说明了有比竖式算法快得多的乘法算法,但为方便起见,我们以后还是使用竖式算法的计算量来代表两个数相乘的计算量.
  (2)幂运算
  给定一个整数a,由ak=a·ak-1,a1=a,归纳地定义了a的任意次幂.在素数判别和大数分解的讨论中,我们常常遇到要计算anmod m.如果根据定义,先计算amod m,再依次计算akmod m=(amod m)·(ak-1mod m)mod m,则至少需要n次乘法才能得到anmod m,而n经常是很大很大,这时计算量也就很大,于是需要有更好的计算anmod m的方法.我们确实有更好的方法,先来看一个例子.
  例 计算3107(mod 134)
  将107写成二进位数,即107=(1101011)2.我们有31≡3(mod  

  
  上例中的方法可以推广到一般情况.当要计算an mod m时,先将n用二进位制表示,设n=(ak-1…a1a1),ai=0或1,i=0,1,…,k-1. 再
  再将使ai=1对应的ri连乘起来,取模m,则得akmod m(这里连乘是指每乘一个数取一次模m,然后用所得的结果再与另一乘数相乘).我们有下面的定理
    定理1.8 给定a,存在求幂取模的算法,使得其计算anmodm的计算量为O(log2nlog22m).
  证明 在上面所描述的算法中,r0=amod m.因为a是一个事先给定的常数,故r0的计算可以忽略.而ri=r2i-1mod m,i=1,…,n-1,因而计算每个ri的计算量是O(log22m)(其中,ri-1乘ri-1的计算量为O(log22mri-1)≤O(log22m),取模m的计算量为O(log22m)),而这里k=〔log2n〕+1=O(log2n),故计算r0,r1,…,rk-1的总共计算为O(log2n·log22m).在把对应于ai=1的ri连乘起来时,每作一次乘法取一次模m,在这串连乘积中,乘法次数至多〔log2n〕+1次,取模m的次数也至多〔log2n+1〕次,而且每次乘法的两个乘数都不超过m,故做连乘积的计算量是O(log2nlog22m).因此,计算an modm总共需要计算量O(log2n log22m).□
  (3)努卡斯序列的项的计算.
  所谓努卡斯序列是指

  
  其中α和β是以下整系数二次方程的根:x2-Px +Q=0,(P,Q)=1
  在以后讨论素数判别时,我们需要计算努卡斯序列的第n项取模m:Unmodm和Vnmodm.它们的计算可利用努卡斯序列的性质,象讨论anmodm的计算一样,得到比较好的算法,因为讨论它的基本思路与上一段一样,且要用到努卡斯序列的一些较繁杂的性质.这里,我们只叙述一个结果,读者有兴趣可自己证明这个结果。
  定理1.9 给定P、Q,(P,Q)=1,存在算法使其计算Unmodm和Vnmodm的计算量是O(log2nlog22m).

  (4)进位制表示的互化
  我们常常需要将一个自然数的一种进位制表示化为另一种进位制表示.譬如,日常给出的自然数是十进位数,要将它输到计算机中就必须将它化成二进位数,反过来,从计算机输出的结果又要从二进位数化为十进位数,才能使常人看懂结果.
  设自然数n,由r1进位制给出,要将它化为r2进位制,我们可以如下完成:在r1进位制体系中进行四则运算,特别是带余除法运算,有

  

  则(qk-1qk-2…q1q0)r2便是n在r2进位制中的表达式.由带余除法的计算量(见定理1.4)知,完成(2)的计算量是O(log23n).
  (5)最大公因数的算法
  求最大公因数的最普遍的算法是欧几里得算法,它最初是公元前由欧几里得提出来的,有时也称它为辗转相除法.表述如下:
  设给定m,n(m>n),令r0=m,r1=n,有

  

  则得rk=gcd(rk-1,rk)=gcd(rk-2,rk-1)=…=gcd(r2,r3)=gcd(r1,r2)=gcd(r0,r1)=gcd(m,n).

  欧几里得算法(3)中作带余除法的次数k可由m和n确定出来.我们介绍下面的定理.
  定理1.10 (3)式中的k<5log2n+1,即得辗转相除的次数不大于n的十进位表示的位数的5倍.

  证明 引入斐波那契序列F0=0,F1=1,Fn=Fn-1+Fn-2,n=2,

rk≥1=F2,rk-1>rk故rk-1≥rk+1≥2=F3,rk-2≥rk-1+rk≥

+1.设n的十进位数表示的位数是1,则有n<101,故k<51+1,而k和51+1都是整数,故k≤51.□
  推论 用欧几里得算法求m,n(m≥n)的最大公因数的计算量是O(log23m).
  证明 因为(3)式中的k<5log10n+1,而且,其中每次带余除法的被除数和除数都不大于m,故由定理1.4知,每次带余除法的计算量是O(log22m),再由定理1.10及n≤m即得,由(3)得到gcd(m,n)的计算量是O(log23m).□
  熟知,由(3)式的最后一个等式往回推演,可以得到u和v使gcd(m,n)=um +vn,而且计算出u,v的计算量也可以证明是O(log23m),故对一次不定方程ax +by=c(其中gcd(a,b)|c)和一次同余式ax≡c(modb)(gcd(a,b)| c)求解的计算量是O(log23m),这里m=max(a,b,c).
  另外,为了以后的需要及其本身的重要性,我们要讨论雅可比符
是可以显然地得出的,故仍需要一个算法.我们可以利用雅可比符号的两点性质:

  

  写出一个类似于欧几里得算法的算法如下.
  以下用e(x)表示自然数x的最高2因子的幂次,即2e(x),2e(x)+1,用x'表示x的最大奇因子,显然有x=2e(x).x'.现在,给定两个数m,n,这里m为奇数且设m>n.令r0=m,r1=n,
  则有

      (4)

  其中r2=r0modr'1,即r0除r′1得的余数.再将r2代换r1,

r'1代换r0重复(4)的手续,不断地重复(4)的演算,最后得到r2=1
  (m>n)的计算量是O(log23m).
  (6)中国剩余定理
  定理 1.11 设m,…,mr(mi>1)是两两互素的自然数,a1,…,ar是r个整数,M=m1…mr,则存在唯一的0≤a<M使得a≡ai(modmi)i=1,…,r.且有算法使得其计算a的计算量是O(r·log23M).

   
i=1,…,r;设a,b都满足0≤a<M,0≤b<M,a≡ai(modmi),b≡ai(modmi)(i=1,…,r),即a-b≡0(modmi),i=1,…,r,而m1,…,mr两两互素,因而a-b≡0(modM),再由0≤a<M,0≤b<M即得a=b.于是唯一性证得.
  按上面的方法计算a,先要计算M=m1…mr,因为m1…mi乘mi+1的计算量是O(log2m1…mi·log2mi+1),故计算M的计算量是O
  同样,计算Mi的计算量也不多于O(log22M).由上一段的讨论,求得ui的计算量是O(log23Mi)≤O(log23M).最后,由ui,Mi,ai计算a的计算量也是O(log23M),因而求a的总计算量是O(rlog32M).□
  关于数论中的基本算法的研究,是计算数论的最基本的研究,不仅是它本身很重要,它在很多其它分支如计算机科学、代数学等中有很大的用处.然而到目前为止,除了有些文章散见于某些杂志和书籍中,还没有较完全的书来专门讨论这些问题.在这一方面,最好的文章是勒默的“计算机技巧应用于数论”.
二 素性判别
  素数这个概念,早在公元前很多世纪就为人们所熟知.后来人们发现所有自然数都是由素数乘起来得到的.欧几里得证明了素数有无限多个,因此,任意大的素数都存在.可是,在自然数的序列1,2,3,……中,素数和合数混杂在一起,对前数千个素数的分布之考察发现素数的分布没有规则,因此,鉴别一个自然数是素数还是合数就成为问题.这个问题在中世纪就引起人们的注意.当时人们试图寻找素数公式.到高斯时代,基本上确认了简单的素数公式是不存在的.在那时,即使对一个十位数的整数来作素性判别都是相当困难的,因此,高斯认定素性判别是数论中最困难的问题之一.从此后,这个问题吸引了大批数学家,但当时的人们没有计算机这个有力的工具,对一般十位以上的数都束手无策.因此,他们或者只对很特殊的数作了些研究,或者,对素性判别作了一般性讨论.而真正用得出的结论去判别一个大数是否素数时,常常因为计算量太大而归于失败.到本世纪初,手摇计算机的产生帮助了象勒默等人发展素性判别.而在1950年之后,由于电子计算机的诞生,数学家们又将注意力转到素性判别的问题上来了.目前,这个分支已经产生了很多好结果.我们将在此作介绍.因为素性判别的理论真正得到发展是近几十年的事,因此,我们主要是介绍近几十年的工作.在本书中,素性判别和素数判别指的是同一件事.
1.素性判别的一般理论
  素性判别的算法是指一个算法,用它可以判别任意一个自然数是否素数.迄今为止,素性判别的方法有很多种,但它们有共同的形式,我们试将它们从总体上来讨论.
  欲要寻求一个素性判别的算法,应先注意到素数所应该满足的一些性质,即一些必要条件.根据这些性质设计出一个条件组(也称试验组).这个条件组有两个特点:凡是素数就满足条件组中的每个条件(也称为通过条件组),凡通过这组试验组数,若不是素数,则它必有一个真因子落在某个特定的集合中.现对任给的数n,先看n 是否通过试验组,如果不通过,则n是合数;如果通过,则其可能的真因子有一个落在特定的集合中.然后,用这个特定的集合的每个元素去试除n,若有某个元素不等于1和n且整除n,则n是合数,否则,n是素数.这样的素性判别算法的计算量由两部分构成:对n逐个检验它是否满足条件组中的条件的计算量和对特定的集合中的元素逐个试除n.设第一部分的计算量是O(f(n)),特定集合的元素个数是g(n),(一般这g(n)个元素是1到n之间的数)则这个算法的计算量是O(f(n)+g(n)log22n).
  例:威尔逊证明了n是素数的充要条件是(n-1)!+1≡0(modn).于是可设计试验组为“条件(n-1)!+1≡0(modn)”,而特定集合是{1,n}.若n通过试验组,则n的可能的真因子在{1,n}.但{1,n}中没有n的真因子,因此,n是素数.检验条件(n-1)!+1≡(modn)的计算量是O(nlog22n).因此,威尔逊的算法的计算量是O(nlog22n+2log22n)=O(nlog2n).下面知道,这个算法的计算量太大了,不是有效算法.
  到目前为止,仍然没有一个素性判别的多项式算法,换言之,没有一个素性判别的算法,它对n执行时的计算量是O(P(log2n)),其中P(x)是多项式函数.“是否存在素性判别的多项式算法?”是一个没有解决的公开问题.人们偏向于说存在素性判别的多项式算法,但至今没有找到.在已有的判别算法中,或者f(n)不是log2n的多项式,或者g(n)不是log2n的多项式.因而要得到一个素性判别的多项式算法,就需要设法使上述的f(n)和g(n)都是log2n的多项式
2.费马小定理和卡米歇尔数
  试除法出现之后,一直到16世纪,其间除了一些很特殊的、很局限的素性判别法外,没有什么重要的结果.但到1640年,法国数学家费马首先注意到素数的一个性质,那就是下面讲叙的费马小定理.这个性质是以后的所有素性判别法产生的根源.
定理2.2 (费马小定理) 若n是素数,则对所有不被n整除的a,有an-1≡1(modn).
  证明 因为(a,n)=1,则a,2a,…,(n-1)a分别按某个重排顺序模n同余于1,2,…,n-1.故有an-1·(n-1)!≡(n-1)!(modn).因为n是素数,因此n与(n-1)!互素,因此,an-1≡1(modn). □
  我们将费马小定理的另一个形式写成下面的推论.
  推论 若n是素数,则对任意的整数有an≡a(modn).
  由第一章第二节的讨论,我们知道,对某个自然数a,1≤a<n,要验证(a,n)=1和an-1≡1(modn)是否成立,需要计算量为O(log23n).因此,以对某些a,1≤a<n,(a,n)=1验证an-1≡1(modn)作为试验组,将可能产生较好的素数判别法.为此,我们要来看n通过试验组的话,n具备什么性质.这就要考察一下费马小定理的逆命题.
  大约2500年前,中国古代数学家就发现22-2是2的倍数,23-2是3的倍数,25-2是5的倍数,27-2是7的倍数,211-2是11的倍数,而2,3,5,7,11都是素数.故他们由此肯定:“若
  2n-2是n的倍数(即2n≡2(modn)),则n是素数”.莱布尼兹研究了《易经》中的这一记载之后,也相信了这个结果.假如这个结果是正确的,则对任给的自然数n>1,只要验证2n≡2(modn)是否成立,即可判定n是否素数,其计算量是O(log23n).这就有了素性判别的多项式算法.然而,很不幸运,这个结果不是正确的.1819年,法国数学家赛路斯指出,2341≡2(mod 341),但是341= 11×31是个合数.自此以后,人们发现了许多具有不同底值a的反例,如391≡3(mod 91)但91=7×13,415≡4(mod 15)但15=3×5等等.事实上,对于任意的a,都有这样的反例,而且有无限多个.我们将证明这一点,在此之前,先给出一个定义.
  定义 对整数a>1,满足an≡a(modn)的合数n称为底为a的伪素数.
  定理2.3 对每一个整数a>1,有无限多个底为a的伪素数.    
底为a的伪素数.我们有(a2-1)(n-1)=a2p-a2=a·(ap-1-1)(ap+a).由于ap与a的奇偶性相同,故2|ap+a;又由费马小定理和pa得p|ap-1-1;由于p是奇数,则a2-1整除ap-1-1;而pa2-1,故有p(a2-1)|ap-1-1.因此,2p(a2-1)|(a2-1)(n-1)即2p|n-1.令n=1 +2pm。现在有a2p=n·(a2-1)+1≡1(modn).故an-1=a2pm≡1m=1(modn).即an≡a(modn),因此n是底为a的伪素数.由于对每个a>1,满足p多个.因此,以a为底的伪素数有无限多个.
  虽然底为2的伪素数有无限多个,但是,它们相对于素数而言是相当少的,隆德大学的波赫曼证明了小于1010×2的素数有882206716个,而塞尔弗来季和瓦格斯塔夫计算出底为2的伪素数在1到2×1010之间只有19865个.因此,在大多数情况下,我们的断言“如果2n≡2(modn),则n是素数.”是正确的,用这个断言作素性判别,出错的概率很小,例如在n<2×1010的范围内,出错的概率小于19865/(882206716 +19865)≈0.0000025.不过,这样的结果,在实际用来作素性判别时,用处不大,尽管它出错的概率很小,但它毕竟是会出错的.而且,对于特定的一个n,用上面的断言去判别它的素性,就不能排除错误就在此出现.(对于其它底a,可以作同样讨论.)
  令人惊奇的是,存在这样的合数n,对任意的满足(a,n)=1的a>1,n都是底为a的伪素数.这样的合数的存在是费马小定理的逆命题不成立的最合适的例证.因为它说明,即使对所有满足(a,n)=1的a有an-1≡1(modn),仍不能断定n是素数.这样的合数是由卡米歇尔首先发现的,故叫卡米歇尔数.
  例 561是卡米歇尔数.这是卡米歇尔发现的第一个卡米歇尔数,也是最小的卡米歇尔数.因为561=3×11×17,若gcd(a,561)=1,则gcd(a,3)=gcd(a,11)=gcd(a,17)=1,由费马小定理知,a2≡1(mod3),a10≡1(mod11),a16≡1(mod17).由于Lcm(2,10,16)=80,故a80≡1(mod3),a80≡1(mod11),a80≡1(mod17),即得a80≡1(mod561),故a500≡(a80)7≡17=1(mod561).所以561是卡米歇尔数.
  一般地,我们有下面的定理.
  定理2.4 (卡米歇尔)n是卡米歇尔数的充分必要条件是:i)n无平方因子;ii)n的每一个素因子p有p-1|n-1;iii)n是奇数且至少有三个不同的素因子.
  证明 先证明充分性.设n满足条件i),
  ii),iii),令n=p1p2…pk(k≥3),p1,p2,…,pk是互不相同的奇素数.现对任意的a>1,若(a,n)=1,则(a,pi)=1,由费马小定理得api-1≡1(mod pi),i=1,2,…,k,而由条件ii),有Lcm(p1-1,p2-1,…,pk-1)|n-1,故得an-1≡1(modpi)(i=1,2,…,k),因而an-1≡1(modn).故n是卡米歇尔数.  
i=1,…,k.先证明n是奇数.若n是偶数且含有一个奇素因子p.这时,取a是p的奇原根,由an-1≡1(modn)得an-1≡1(modp).因此,p-1|n-1,但p-1为偶数而n-1为奇数,这是不可能的.又若n=2t,t>1,取a=3,则(3,n)=1.1(mod2t).否则,,则,但
  假设不符.故n必是奇数,因而pi是奇素数,i=1,…,k.令gi是模piui的原根,i=1,…,k.由中国剩余定理,可求得a使a≡gi(modpiui)(i=1,…,k).故gcd(a,n)=1.因为n是卡米歇尔数,则an-1≡1(modn),即有,an-1≡1(modpiui),另一方面an-1≡gin-1(mod piui),故有gin-1≡1(modpiui).由原根的定义得φ(piui)|n-1,即是piui-1(pi-1)|n-1,i=1,…,k.而n-1=plu1…pkuk-1,故ui=1,i=1,…,k,因此,条件i)证得.又pi-1|n-1,i=1,…,k,即条件ii)证得.对iii),若k<3,由n是合数,则k=2,则有n=p1·p2(p1≠p2),由于p1-1|p1p2-1,而p1p2-1=(p1-1)p2+p2-1,故得p1-1|p2-1,同理可得,p2-1|p1-1,由此可得p1-1=p2-1,即p1=p2,这与假设不符,因而k≥3,即iii)证得. □
  例 由定理2.4可得2821=7·13·31,10585=5·29·73,27845=5·17·29·23,172081=7·13·31·61都是卡米歇尔数.
  由于发现了卡米歇尔数,人们认识到利用费马小定理来作素性判别,不是件简单的事情.假如卡米歇尔数只有有限个,则可以给出一个上界M,这样,在n>M的范围内对n作素性判别就变得容易起来.然而,卡米歇尔数可能有无限多个,这只是一个猜想,至今无人给出证明,但人们大都认为这个结果是正确的.
3.素性判别与广义黎曼猜想
  1976年,缪内发现了素性判别与广义黎曼猜想(见附录)的一个深刻的关系.他得到的结果是:如果广义黎曼猜想(REH)成立,则有一个算法存在,它对每个n,可在log2n的多项式时间内判明n是否素数.即存在素性判别的多项式算法,而且可设计出这个算法.
  这个关系的发现,也是以研究费马小定理为出发点的.下面熟知的欧拉的结果是费马小定理的推广.
  定理2.11 若n是一个奇素数,则对任意的自然数a,na有
  1976年初,勒默发表了一篇短小精悍的文章,证明了定理1的逆定理也成立,他得到了.
  定理2.12 (勒默) 若n是奇合数,则存在自然数a,满足(a,
  证明 若n含有因子pα,p是奇素数,α>1.取a为pα的原根,    
  若n=p1p2…Pt,t≥2,P1,P2,…,Pt为互不相同的奇素数.由      
即2≡0(modp2),但p2是奇素数.这是不可能的.故必有a使(a,

  尽管勒默的这个结果说明了,若n是合数,则在1到n之间到少存
也没有指明a在何处.对某个数n,当然,我们可以对1到n之间的每  
  这个计算量太大了.因此,我们希望能够改进勒默的这个结果.如果对 
    时只要对较少的a检验.这样就可望得出较有效的素性判别法.
  缪内注意到,给定一个数n,在n的缩系组成的群Un={a(modn)
    全体构成一个子群,设其为Mn.于是就可以利用下面的安克尼和蒙特哥梅利的结果.
  定理2.13 (安—蒙)在广义黎曼猜想(REH)成立的条件下.存在一个常数C,对任何自然数n及Un到任何一个群G的非单位同态ψ,都存在q使1<q≤C(log2n)2且ψ(qmodn)≠1(其中1是G的单位元).
  由此,缪内得到了下面的结果:
  定理2.14 (缪内)在广义黎曼猜想的成立之前提下,存在一个常数C,对任何的自然数n,若n是合数,则存在1≤a≤C(logn)2

   
Un到Un的同态映射.因为n是合数,由定理2.12知,ψ不是单位同态映射.因此,由定理2.13,存在a使1<a≤C(log2n)2使ψ(amodn)

  
  注 定理2.14中的常数C可取作与定理2.13中的C相同.

  维路于1978年指出,定理2.14中的常数C可以定为70.
  由定理2.14,我们说,在广义黎曼猜想成立的前提下,素数判别的多项式算法是存在的.我们可以如下设计出这样一个算法:  

(modn)是否成立.若对其中的一个a成立,则停止检验,这时n是合数(由定理2.11),若对每一个a都不成立,也就是说,对a=1,2,…, 
  上述算法可以完全确定地判别n是否素数, 其计算量就是作70


即工作量是O(log25),因而这是一个多项式算法.
  由此可见,只要广义黎曼猜想成立,则素性判别的多项式算法是找到了的.但证明广义黎曼猜想是相当困难的,这是数学家们一直关注的问题.这里的讨论也表明,素性判别是需要用较高深的方法来研究.

6.一种概率算法

  缪内的结果虽然很好,但它毕竟是依赖于一个悬而未决的假设.因而在实用中,它是不能被采用的.故我们回到勒默的结果,看看从这个结果还能引伸出什么方法来.
  勒默的结果说,若n是合数,则存在a,满足(a,n)=1使样的a至少有多少.
   
 n是合数时,由勒默的结果定理2.12,Mn是Un的真子群,即Mn≠Un,因而Mn在Un中的指标至少是2,即(Un∶Mn)≥2.故Mn中的元素个数至多是Un中元素个数的一半,即Un中不在Mn中的元素个数至少   
   

(modn).
  证明 对1到n之间的数a,若(a,n)≠1,则显然a不满足    
  这个推论可以产生一种作“素性判别”的概率算法:
  对任何输入n,从1到n之间随机地抽取k个数a1,a2,…,ak

是否成立,若有某个ai使此同余式不成立,则断言n是合数;若对a1,…,ak,同余式都成立,则断言n是素数.
  在这个算法中,ai的选取是随机的,而且结论(断言)正确性不是完全确定的,故此算法叫概率算法.在这个概率算法中,当得到断言说输入n是合数时,由定理2.11,结论是正确的;当得到断言说输入是素数时,没有什么定理可以确保结论是正确的.也就是说,此算法在执行完毕后,可能将一个事实上是合数的输入断言为是素数了.但是,由以上定理2.15的推论,这种出错的概率是很小的.因为,若n事实上是合     
乎为零(但不是零!),因此用此算法作素数判别21000次,仅可能出现一次错误(从统计的角度来说).然而,对某个特定的n,通过算法后被断言为素数,我们并不能确定这个断言一定不是错误的.因为以上的原因,这个算法常被称为“合数判别”算法而不称为素数判别算法.但是,因为这个算法的计算量很小,只有O(klog23n),故它确实常被采用.例如用它来寻找一组数,使其中绝大多数是素数.最近,还有人(如赖宾)用它来支持一些孪生素数和素数分布的猜想.
7.目前最有效的艾德利曼经—鲁梅利算法  1983年,素数判别的研究里,出现了突破性的进展,那就是艾德利曼和鲁梅尼提出来了一个方法.这个方法是一个近似多项式算法,它在实际应用中,对一千位以下的数而言,与多项式算法一样有效.
  要系统地讲述这个算法,需要涉及到代数数论、乘法数论及多项式理论等多方面的专门知识.因而,我们这里只是概要地介绍这个算法,很多证明就略去了.但我们尽量保证读者能从介绍中对算法的基本思想、方法和技巧有个大概了解.我们将介绍的不是艾德利曼—鲁梅利原来的形式,而是由勒恩斯爵简化了的形式.
  设p,q是两个素数,p|q-1,记ξp和ξq分别为p次和q次本原单位根.设gq是q的原根,即g是群Ug的生成元.定义映射Xpq:Uq→〈ξp〉(其中〈ξp〉为由ξp生成的循环群)为Xpq(gqj)=ξpj.因为p|q-1且Uq是q-1元循环群.则Xpq是同态映射.对于任给的整  
ξpiξqi|aij∈Z}是一个环)
  由高斯和的性质,有:若n是素数,则τ(Xpq)np-1-1≡Xpq(n)(modn)(注意:因为τ(Xpq)是Rpq中的元素,因而,我们是在环Rpq中讨论同余式的).易知,p=2时,这就是费马小定理,因此,上述的素数的这个性质,事实上就是费马小定理在环Rpq中的推广.我们来看看,当一个数n,对一些p,q,p|q-1满足τ(Xpq)np-1≡Xpq(n)(modn)时,能对n作出什么结论.勒恩斯爵对此给予了一个回答,他证明了下面的定理.
  
个集合满足,对任意的一个素数q∈Q有q-1|Z.若奇数n满足下列条件:
  (i)对每个p∈P, q∈Q,若p|q-1,则τ(Xpq)np-1-1≡Xpq(n)(modn).
  (ii)对每个p∈P和n的素因子r有pep|rp-1-1,其中pep||np-1-1.
则每个n的素因子r,有r≡ni(modw),其中i有0≤i<Z.w=
  注 定理2.16中的条件(ii)看起来似乎难以验证,而事实下,可以证明,若对某个p,存在q(q不必在Q中)使p|q-1且Xpq(n)≠1,τ(Xpq)np-1-1≡Xpq(n)(modn),则条件(ii)就对p及任何n的素因子r成立.在实际应用时,对某个p要使Xpq(n)≠1对某个素数q(p|q-1)成立是很容易做得到的.
  由勒恩斯爵的结果,我们可以如下编出一个算法,这个算法是基于艾德利曼—鲁梅利的思想,采用了勒恩斯爵的表述.
  对任何输入n,n是奇数.第一步,寻找素数集合P,使得由其产

  (Ⅰ)对每个p∈P,q∈Q使p|q-1,验证(即定理2.16中的条件(i)
  (Ⅱ)对每个p∈P,寻找一个q(不必属于Q)使p|q-1且Xpq(n)≠1.(这是为了让定理2.16中的条件(ii )成立.)
  如果(Ⅰ)对某对 p∈P,q∈Q(p|q-1)不成立或(Ⅱ)对某个p∈P不存在q使p|q-1,Xpq(n)≠1,,则n是合数.否则,即(Ⅰ),(Ⅱ)都通过了,由定理2.16知,n的任何一个素因子r满足r≡ni(modw),其中
  对r=nimodw,i=1,2,…,Z-1,逐个检验r是否整除n.若
  在上述算法中,第二步的计算量,可用高斯和的性质(它所满足的最小多项式)估计出来,它是log2n的多项式.第一步和第三步可以在O〔(log2n)C·log2log2log2n〕的计算量内完成,这个由下面的波门伦斯的结果得出.
  

满足.  (log2n)C1log2log2log2n<Z<(log2n)C2·log2log2log2n
在第三步中,至多要验证Z个整除式,每个整除式的计算量是O(log23n),因而,完成第三步至多需要O〔(log2n)Clog2log2log2n〕的计算量.
  总之,用上述算法验证一个数n是否素数,几乎只需要多项式时间.因为当n的位数不太大时(例如少于1000位),C(log2log2log2n)是很小的,故其计算量还不及一个多项式算法多.
8.一些特殊的素数及其判别
  麦森勒素数
  所谓麦森勒数是指形如2p-1(p是素数)的数,记为Mp,M2=3,M3=7,M5=31,M7=127等,麦森勒素数即是麦森勒数又是素数者.
  早在1644年,麦森勒就对p=2,3,5,7,11,13,17,19计算了Mp,他证明了除p=11外,其它的Mp是素数,他由此断言,不大于257的各素数,只有p=2,3,5,7,13,17,19,31,67,127,257使Mp是素数.当时没有谁(包括他本人)证明了这个断言.直到1772年,欧拉经过多年探索,证明了是231-1=M31是素数,大约在1875年,努卡斯证明了2127-1是素数,但是证明了M67不是素数.因此,麦森勒的断言就不全对了.1886年,有人证明了261-1是素数,因而,人们怀疑麦森勒在抄写时,将61误抄成了67.然而,1911年,泡尔斯证明了289-1也是素数,三年后,又证明了2107-1也是素数.最后,1922年,葛莱启克证明了2257-1不是素数.这样就彻底说明了麦森勒的断言是不对的.但麦森勒的断言激发了人们对麦森勒素数的研究.到目前为止,已经得到的前29个麦森勒素数Mp是:p=2,3,5,7,13,17,19,31,61,89,107,127,521,607,1279,2203,2281,3217,4253,4423,9689,9941,11213,19937,21701, 23209,44497,86243, 132049.
  M132049是一个39751位的素数,是目前已知的最大的素数.要对诸如M132049这么大的数判别其是否素数,肯定要用到数的特殊形式,用特殊的方法(艾德利曼—鲁梅利方法也无济于事了).另外,从上面看出,那些使Mp为素数的素数p的分布是不规则的.因而有必要对麦森勒数研究其特殊的素性判别方法.有一种目前最有效的、专门用于麦森勒数的素性检验方法是下述的努卡斯—勒默方法.
  定理2.18 设p是一个奇素数,定义序列{Ln}如下:
  L0=4,Ln+1=(Ln2-2)mod2p-1则Mp=2p-1是素数的充分必要条件是Lp-2=0.
  证明定理2.18之前,需要罗列一下努卡斯序列
  U0=0,U1=1,Un+1=4Un-Un-1
  V0=2,V1=4,Vn+1=4Vn-Vn-1  的一些性质:

  (i)Vn=Un+1-Un-1

 

  

  (iv)Um+n=UmUn+1-Um-1Un

  (v)U2n=UnVn,V2n=Vn2-2

  (vi)若Un≡0(modpe),则Unp≡0(modpe+1)(p是任何一个素数)

 

  (viii)对任一个整数m,定义m对{Un}的幻秩为使Un≡0(modm)成立的正整数n中的最小者.记为ρ(m),则有

  Un≡0(modm)的充分必要条件是ρ(m)|n.

  以上这些性质都可由努卡斯序列的定义用归纳法得到[1].

  现在我们来证明定理2.18.

  由{Ln}的定义及(v)易知:Ln≡V2n(mod2p-1).又由2Un+1=4Un+Vn及gcd(Un+1,Un)=1得gcd(Un,Vn)|2.进而知,Un和Vn无公共的奇因子.如果Lp-2=0,我们必有

  U2p-1=U2p-2V2p-2≡0(mod2p-1)

  

又,如果ρ=ρ(2p-1)是2p-1对{Un}的幻秩,则ρ|2p-1


设n=P1e1…prer是n的标准分解式,则Pi>3[因为n=2p-1≡(-1)p-1≡-2(mod3)]i=1,…,γ,令t=Lcm[p1e1-1(pε-ε1),…,

  

  所述有: 

   
  因此r≤2且t=ρ或2ρ,故t是2的幂数.因此诸ei=1,这时,若r=2,则n=2p-1=(2k±1)(2i±1),其中2k±1和2i±1是素数,这是不可能的.因而只有r=1,即n是素数.

  反过来,若n=2p-1是素数,由Ln=V2nmod2p-1,直接验证,即知L2p-20.

  到目前为止,人们得到的最大的素数M132049就是用这个努卡斯—勒默方法得到的,这是1983年9月由斯诺文斯基在大量计算后得到的.

  近期,威廉斯对努卡斯—勒默的方法作了推广,他得到一些用于对诸如10n±10m+1,an-1/a-1等形式的数作素性判别的方法.

  费马素数
形如22n+1的数称为费马数,记为Fn,若它又是素数,则称为费马素数.

  早在17世纪,费马验证了F0=3,F1=5,F2=17,F3=257,F4=65537是素数.据此,他猜测Fn都是素数.但到1732年,欧拉分解了F5:

  
  故费马的这个猜测不成立.自此之后,人们对n=6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,27,29,30,32,36,38,39,42,52,55,58,62,63,66,71,73,75,77,81,91,93,99,117,125,144,147,150,201,205,207,215,226,228,250,255,267,268,275,284,287,298,316,329,334,398,416,452,544,556,637,692,744,931,1551,1945,2023,2089,2456,3310,4724,6537,6835,9428,9448,23471证明了Fn是合数.然而,除前5个费马数为素数外, 再也没发现任何费马素数了.因而人们更倾向于认为费马素数只有有限个,但没人对此作出证明.近年来,人们把精力放在分解费马数上,没人研究特殊的判别法来对费马数作素性判别.
  k·2n+1型素数
  研究k·2m+1型素数,对分解费马数有着重要作用.熟知,费马数Fn的每个素因子都具有形状k·2m+1,其中m≥n+2,k是奇数.当已知某些k·2m+1是素数时,用它去试除Fn(n≤m-2),这样就可以找到一些费马数的因子.另外,在验证了某个k·2m+1是素数后,再对k·2m-1作素性判别,则可能找出一对孪生素数来,在这个方面的研究是从普罗丝开始的,他首先提出了一个判别k.2m+1(k<2m)型数是否素数的方法.
  定理2.19 给定N=k·2m+1,k<2m,先寻找一个整数D

出一个合适的D),则N是素数的充分必要条件是D(N-1)/2≡-1(modN).
  用普罗丝的这个结果及一些具体的方法,贝利、鲁宾逊、威廉斯等人对一些奇数k和m决定的数k·2m+1作了系统的考察,他们对1≤k≤150,1≤m≤1500,找出了所有k·2m+1型的素数.又对3≤k≤29和1500<m≤4000,列出了所有的k·2m+1型的素数,得出了7个新的费马数的因子,而且还得到了一对很大的孪生素数:297.2546+1和297·2546-1.(目前发现的最大的孪生素数是156·5202±1)
  最后,介绍斯塔克的一个结果.若m固定,序列{ak}={k·2m+1}含有无限多个素数,这是由狄利克雷定理得出的.自然地,人们提出这样一个问题:当k固定时,序列{bm}={k·2m+1}是否含有无限多个素数呢?斯塔克对这个问题给了否定的回答,他给了一个k=2935363331541925531,它使序列{k·2m+1=bm}中每一项都是合数.
  由1组成的素数
  每位数都是1的n位数记为Rn,例如R1=1,R2=11,R7=1111111等等.熟知R2=11是素数.
  因为当m|n时,Rm|Rn,故Rn是素数的必要条件是n是素数.然而,n是素数时,Rn不一定是素数,例如n=3时,R3=111=3×37不是素数.至今为止,只有得出当n=2,19,23,317,1031时,Rn是素数.其中R19已由前面的“n±1”判别法证明了,R23是1929年被证明为素数的.R317是1979年由威廉斯证明的,R1031是1986年由威廉斯和达内用第四节介绍的方法证明为素数的.这五个素数是Rn系统中的前五个素数,即其它不大于1031的素数n都使Rn为合数.事实上,达内还证明了,第六个R_素数必定大于R10000,也就是说,在1到R10000之间只有以上五个R_素数.
9.在计算机上实施素数判别的战略  迄今为止,所有得到的素性判别法有简单明了的试除法,有赖宾等人的概率算法,有努卡斯到威廉斯的利用n±1,n2+1,n2±n+1的因子方法,还有艾德利曼—鲁梅利的最有效的近似多项式方法.这些方法各有利弊,它们各适用于适当的输入.上述第一种算法虽然很耗费  接了当,对较小的数n(最大不超过108)合适.第二种算法,用于作素性判别时,它可能出现差错,但出差错的可能性很小,因而可用它来确认哪些数最有可能是素数.努卡斯和威廉斯的n±1,n2+1,n2±n+1方法,对于20—50位的素数是有效的工具.艾德利曼—鲁梅利的方法是普遍的方法,它不依赖于待判别的数的特殊性,而且计算量是O((log2n)Clog2log2log2n),故一般利用它来对50位以上的数来作素性判别.我们摘抄波门伦斯的一个表,它表明了三种方法的优劣.


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值