卢卡斯-莱默检验法

来自testwiki
imported>Cookai12052024年10月22日 (二) 09:59的版本 (回退Cookai1205對話)的編輯:svg顯示不佳)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:NoteTA 卢卡斯-莱默检验法Template:Lang-en),是数学中检验梅森数素性检验,由法國數學家爱德华·卢卡斯Template:Lang)于1878年完善,美國數學家德里克·亨利·莱默Template:Lang)随后于1930年代将其改进。

因特网梅森質数大搜索用这个检验法找到了不少很大的質数,最近几个最大的質数就是这个项目发现的。[1]由于梅森数比随机选择的整数更有可能是質数,因此他们认为这是一个极有用的方法。

方法

卢卡斯-莱默检验法原理是这样:
令梅森数 Mp = 2p− 1作为检验对象(预设p是質数,否则Mp就是合数了)。

定义序列{si }:所有的i ≥ 0

si={4si122 ,如果i=0
,如果i>0
.
.
.

这个序列的开始几项是4, 14, 194, 37634, ... Template:OEIS

那么Mp是素数当且仅当

sp20(modMp);

否则, Mp合数
sp − 2Mp的余数叫做p卢卡斯-莱默余数

例子

假设我们想验证M3 = 7是素数。我们从s=4开始,并更新3−2 = 1次,把所有的得数模7:

  • s ← ((4×4) − 2) mod 7 = 0

由于我们最终得到了一个能被7整除的s,因此M3是素数。

另一方面,M11 = 2047 = 23×89就不是素数。我们仍然从s=4开始,并更新11−2 = 9次,把所有的得数模2047:

  • s ← ((4×4) − 2) mod 2047 = 14
  • s ← ((14×14) − 2) mod 2047 = 194
  • s ← ((194×194) − 2) mod 2047 = 788
  • s ← ((788×788) − 2) mod 2047 = 701
  • s ← ((701×701) − 2) mod 2047 = 119
  • s ← ((119×119) − 2) mod 2047 = 1877
  • s ← ((1877×1877) − 2) mod 2047 = 240
  • s ← ((240×240) − 2) mod 2047 = 282
  • s ← ((282×282) − 2) mod 2047 = 1736

由于s最终仍未能被2047整除,因此M11=2047不是素数。但是,我们从这个检验法仍然无法知道2047的因子,只知道它的卢卡斯-莱默余数1736。

正确性的证明

我们注意到si是一个具有闭式解的递推关系。定义ω=2+3ω¯=23;我们可以用数学归纳法来验证对于所有i,都有si=ω2i+ω¯2i

s0=ω20+ω¯20=(2+3)+(23)=4
sn=sn122=(ω2n1+ω¯2n1)22=ω2n+ω¯2n+2(ωω¯)2n12=ω2n+ω¯2n,

最后一个步骤可从ωω¯=(2+3)(23)=1推出。在两个部分中,我们都将用到这个结果。

充分性

我们希望证明sp20(modMp)意味着Mp是素数。我们叙述一个利用初等群论的证明,由J. W.布鲁斯给出[2]

假设sp20(modMp)。那么对于某个整数k,有ω2p2+ω¯2p2=kMp,以及:

ω2p2=kMpω¯2p2(ω2p2)2=kMpω2p2(ωω¯)2p2ω2p1=kMpω2p21.(1)

现在假设Mp是合数,其非平凡素因子q > 2(所有梅森素数都是奇数)。定义含有q2个元素的集合X={a+b3|a,bq},其中q是模q的整数,是一个有限域X中的乘法运算定义为:

(a+b3)(c+d3)=[(ac+3bd) mod q]+[(bc+ad) mod q]3.

由于q > 2,因此ωω¯位于X内。任何两个位于X内的数的乘积也一定位于X内,但它不是一个,因为不是所有的元素x都有逆元素y,使得xy = 1。如果我们只考虑有逆元素的元素,我们便得到了一个群X*,它的大小最多为q21(因为0没有逆元素)。


现在,由于Mp0(modq),且ωX,我们有kMpω2p2=0,根据方程(1)可得ω2p1=1。两边平方,得ω2p=1,证明了ω是可逆的,其逆元素为ω2p1,因此位于X*内,它的能整除2p。实际上,这个阶必须等于2p,因为ω2p11,因此这个阶不能整除2p1。由于群元素的阶最多就是群的大小,我们便得出结论,2pq21<q2。但由于qMp的一个非平凡素因子,我们必须有q2Mp=2p1,得出矛盾2p<2p1。因此Mp是素数。

必要性

我们假设Mp是素数,欲推出sp20(modMp)。我们叙述一个Öystein J. R. Ödseth的证明[3]。首先,注意到3是模 Mp二次非剩余,这是因为对于奇数p > 1,2 p − 1只取得值7 mod 12,因此从勒让德符号的性质可知(3|Mp)是−1。根据欧拉准则,可得:

3(Mp1)/21(modMp).

另一方面,2是模Mp的二次剩余,这是因为2p1(modMp),因此22p+1=(2(p+1)/2)2(modMp)。根据欧拉准则,可得:

2(Mp1)/21(modMp).

接着,定义σ=23,并像前面那样,定义X*为{a+b3|a,bMp}的乘法群。我们将用到以下的引理:

(x+y)MpxMp+yMp(modMp)

(根据费马小定理),以及

aMpa(modMp)

对于所有整数a(费马小定理)。

那么,在群X*中,我们有:

(6+σ)Mp=6Mp+(2Mp)(3Mp)=6+2(3(Mp1)/2)3=6+2(1)3=6σ.

简单计算可知 ω=(6+σ)2/24。我们可以用这个结果来计算群X*中的ω(Mp+1)/2

ω(Mp+1)/2=(6+σ)Mp+1/24(Mp+1)/2=(6+σ)Mp(6+σ)/(24×24(Mp1)/2)=(6σ)(6+σ)/(24)=1.

其中我们用到了以下的事实:

24(Mp1)/2=(2(Mp1)/2)3(3(Mp1)/2)=(1)3(1)=1

由于Mp3(mod4),我们还需要做的就是把方程的两边乘以ω¯(Mp+1)/4,并利用ωω¯=1

ω(Mp+1)/2ω¯(Mp+1)/4=ω¯(Mp+1)/4ω(Mp+1)/4+ω¯(Mp+1)/4=0ω(2p1+1)/4+ω¯(2p1+1)/4=0ω2p2+ω¯2p2=0sp2=0.

由于sp−2是整数,且在X*内是零,因此它也是零mod Mp

参见

注释

  1. GIMPS Home Page. Frequently Asked Questions: General Questions: What are Mersenne primes? How are they useful? -{R|http://www.mersenne.org/faq.htm#what}- Template:Wayback
  2. J. W. Bruce. A Really Trivial Proof of the Lucas-Lehmer Test. The American Mathematical Monthly, Vol.100, No.4, pp.370–371. April 1993.
  3. Öystein J. R. Ödseth. A note on primality tests for N = h · 2n − 1. Department of Mathematics, University of Bergen. -{R|http://www.uib.no/People/nmaoy/papers/luc.pdf}- Template:Wayback

参考文献

外部链接

Template:数论算法