数学中，**卢卡斯-莱默检验法**（英語：）是检验梅森数的素性检验，是由爱德华·卢卡斯于1878年完善，德里克·亨利·莱默随后于1930年代将其改进。

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

方法
--

卢卡斯－莱默检验法原理是这样：  

令梅森数
*M**p* = 2*p*− 1作为检验对象（预设*p*是素数，否则*M**p*就是合数了）。  

定义序列{*s**i* }：所有的*i* ≥ 0 

|  |  |
| --- | --- |
| s\_{i}={\begin{cases}\;\;\,4\\s\_{{i-1}}^{2}-2\end{cases}} | ，如果\displaystyle i=0； |
| ，如果\displaystyle i>0。 |

.
.
.
这个序列的开始几项是4, 14, 194, 37634, ... （OEIS數列A003010）  

那么*M**p*是素数当且仅当  

s\_{{p-2}}\equiv 0{\pmod {M\_{p}}};  

否则, *M**p*是合数。  

*s**p* − 2模*M**p*的余数叫做*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。

正确性的证明
------

我们注意到{\langle }s\_{i}{\rangle }是一个具有闭式解的递推关系。定义\omega =2+{\sqrt {3}}及{\bar {\omega }}=2-{\sqrt {3}}；我们可以用数学归纳法来验证对于所有*i*，都有s\_{i}=\omega ^{{2^{i}}}+{\bar {\omega }}^{{2^{i}}}：

s\_{0}=\omega ^{{2^{0}}}+{\bar {\omega }}^{{2^{0}}}=(2+{\sqrt {3}})+(2-{\sqrt {3}})=4。
{\begin{array}{lcl}s\_{n}&=&s\_{{n-1}}^{2}-2\\&=&\left(\omega ^{{2^{{n-1}}}}+{\bar {\omega }}^{{2^{{n-1}}}}\right)^{2}-2\\&=&\omega ^{{2^{n}}}+{\bar {\omega }}^{{2^{n}}}+2(\omega {\bar {\omega }})^{{2^{{n-1}}}}-2\\&=&\omega ^{{2^{n}}}+{\bar {\omega }}^{{2^{n}}},\\\end{array}}
最后一个步骤可从\omega {\bar {\omega }}=(2+{\sqrt {3}})(2-{\sqrt {3}})=1推出。在两个部分中，我们都将用到这个结果。

### 充分性

我们希望证明s\_{{p-2}}\equiv 0{\pmod {M\_{p}}}意味着M\_{p}是素数。我们叙述一个利用初等群论的证明，由J. W.布鲁斯给出。 

假设s\_{{p-2}}\equiv 0{\pmod {M\_{p}}}。那么对于某个整数*k*，有\omega ^{{2^{{p-2}}}}+{\bar {\omega }}^{{2^{{p-2}}}}=kM\_{p}，以及：

{\begin{array}{rcl}\omega ^{{2^{{p-2}}}}&=&kM\_{p}-{\bar {\omega }}^{{2^{{p-2}}}}\\\left(\omega ^{{2^{{p-2}}}}\right)^{2}&=&kM\_{p}\omega ^{{2^{{p-2}}}}-(\omega {\bar {\omega }})^{{2^{{p-2}}}}\\\omega ^{{2^{{p-1}}}}&=&kM\_{p}\omega ^{{2^{{p-2}}}}-1.\quad \quad \quad \quad \quad (1)\\\end{array}}
现在假设*M**p*是合数，其非平凡素因子*q* > 2（所有梅森素数都是奇数）。定义含有*q*2个元素的集合X=\{a+b{\sqrt {3}}|a,b\in {\mathbb {Z}}\_{q}\}，其中{\mathbb {Z}}\_{q}是模*q*的整数，是一个有限域。*X*中的乘法运算定义为：

(a+b{\sqrt {3}})(c+d{\sqrt {3}})=[(ac+3bd){\hbox{ mod }}q]+[(bc+ad){\hbox{ mod }}q]{\sqrt {3}}.
由于*q* > 2，因此\omega 和{\bar {\omega }}位于X内。任何两个位于*X*内的数的乘积也一定位于*X*内，但它不是一个群，因为不是所有的元素*x*都有逆元素*y*，使得*xy* = 1。如果我们只考虑有逆元素的元素，我们便得到了一个群*X*\*，它的大小最多为q^{2}-1（因为0没有逆元素）。

  

现在，由于M\_{p}\equiv 0{\pmod q}，且\omega \in X，我们有kM\_{p}\omega ^{{2^{{p-2}}}}=0，根据方程(1)可得\omega ^{{2^{{p-1}}}}=-1。两边平方，得\omega ^{{2^{p}}}=1，证明了\omega 是可逆的，其逆元素为\omega ^{{2^{{p}}-1}}，因此位于*X*\*内，它的目能整除2^{p}。实际上，这个阶必须等于2^{p}，因为\omega ^{{2^{{p-1}}}}\neq 1，因此这个阶不能整除2^{{p-1}}。由于群元素的阶最多就是群的大小，我们便得出结论，2^{p}\leq q^{2}-1<q^{2}。但由于*q*是M\_{p}的一个非平凡素因子，我们必须有q^{2}\leq M\_{p}=2^{p}-1，得出矛盾2^{p}<2^{p}-1。因此M\_{p}是素数。

### 必要性

我们假设M\_{p}是素数，欲推出s\_{{p-2}}\equiv 0{\pmod {M\_{p}}}。我们叙述一个Öystein J. R.
Ödseth的证明。首先，注意到3是模 *M**p*的二次非剩余，这是因为对于奇数*p* > 1，2*p* − 1只取得值7 mod 12，因此从勒让德符号的性质可知(3|M\_{p})是−1。根据欧拉准则，可得：

3^{{(M\_{p}-1)/2}}\equiv -1{\pmod {M\_{p}}}.
另一方面，2是模M\_{p}的二次剩余，这是因为2^{p}\equiv 1{\pmod {M\_{p}}}，因此2\equiv 2^{{p+1}}=\left(2^{{(p+1)/2}}\right)^{2}{\pmod {M\_{p}}}。根据欧拉准则，可得：

2^{{(M\_{p}-1)/2}}\equiv 1{\pmod {M\_{p}}}.
接着，定义\sigma =2{\sqrt {3}}，并像前面那样，定义*X*\*为\{a+b{\sqrt {3}}|a,b\in {\mathbb {Z}}\_{{M\_{p}}}\}的乘法群。我们将用到以下的引理：

(x+y)^{{M\_{p}}}\equiv x^{{M\_{p}}}+y^{{M\_{p}}}{\pmod {M\_{p}}}
（根据费马小定理），以及

a^{{M\_{p}}}\equiv a{\pmod {M\_{p}}}
对于所有整数*a*（费马小定理）。

那么，在群*X*\*中，我们有：

{\begin{array}{lcl}(6+\sigma )^{{M\_{p}}}&=&6^{{M\_{p}}}+(2^{{M\_{p}}})({\sqrt {3}}^{{M\_{p}}})\\&=&6+2(3^{{(M\_{p}-1)/2}}){\sqrt {3}}\\&=&6+2(-1){\sqrt {3}}\\&=&6-\sigma .\end{array}}
简单计算可知 \omega =(6+\sigma )^{2}/24。我们可以用这个结果来计算群*X*\*中的\omega ^{{(M\_{p}+1)/2}}：

{\begin{array}{lcl}\omega ^{{(M\_{p}+1)/2}}&=&(6+\sigma )^{{M\_{p}+1}}/24^{{(M\_{p}+1)/2}}\\&=&(6+\sigma )^{{M\_{p}}}(6+\sigma )/(24\times 24^{{(M\_{p}-1)/2}})\\&=&(6-\sigma )(6+\sigma )/(-24)\\&=&-1.\end{array}}
其中我们用到了以下的事实：

24^{{(M\_{p}-1)/2}}=(2^{{(M\_{p}-1)/2}})^{3}(3^{{(M\_{p}-1)/2}})=(1)^{3}(-1)=-1。
由于M\_{p}\equiv 3{\pmod 4}，我们还需要做的就是把方程的两边乘以{\bar {\omega }}^{{(M\_{p}+1)/4}}，并利用\omega {\bar {\omega }}=1：

{\begin{array}{rcl}\omega ^{{(M\_{p}+1)/2}}{\bar {\omega }}^{{(M\_{p}+1)/4}}&=&-{\bar {\omega }}^{{(M\_{p}+1)/4}}\\\omega ^{{(M\_{p}+1)/4}}+{\bar {\omega }}^{{(M\_{p}+1)/4}}&=&0\\\omega ^{{(2^{p}-1+1)/4}}+{\bar {\omega }}^{{(2^{p}-1+1)/4}}&=&0\\\omega ^{{2^{{p-2}}}}+{\bar {\omega }}^{{2^{{p-2}}}}&=&0\\s\_{{p-2}}&=&0.\\\end{array}}
由于*s**p*−2是整数，且在*X*\*内是零，因此它也是零mod *M**p*。

参见
--

* 梅森素数
* 因特网梅森素数大搜索（GIMPS）
* 新梅森猜想
* 埃拉托斯特尼筛法
* 米勒-拉宾检验
* 试除法
* 费马素性检验
* 卢卡斯-莱默检验法
* 孪生素数
* 三胞胎素数
* 四胞胎素数
* 素数判定法则
* 表兄弟素数
* 六素数
* X²+1素数

参考文献
----

* Richard Crandall and Carl Pomerance.  1st edition. Springer. 2001. ISBN 978-0-387-94777-8.  引文格式1维护：冗余文本 (link) Section 4.2.1: The Lucas–Lehmer test, pp.167–170.

外部链接
----

* 埃里克·韦斯坦因.. MathWorld.
* GIMPS (The Great Internet Mersenne Prime Search)（页面存档备份，存于）
* A proof of Lucas–Lehmer–Reix test (for Fermat numbers) （页面存档备份，存于）
* Lucas–Lehmer test at MersenneWiki

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
数论算法 |
| --- |
|  |
| 素数测试 | 
* AKS
* APR（英语：）
* Baillie–PSW（英语：）
* 椭圆曲线（英语：）
* Pocklington（英语：）
* 费马
* 卢卡斯（英语：）
* *卢卡斯-莱默*
* *Lucas–Lehmer–Riesel（英语：）*
* *普罗斯*
* *Pépin（英语：）*
* 二次Frobenius（英语：）
* Solovay–Strassen（英语：）
* 米勒-拉宾

 |
|  |
| 質數生成（英语：） | 
* 阿特金筛法（英语：）
* 埃拉托斯特尼筛法
* Pritchard筛法（英语：）
* Sundaram筛法（英语：）
* 輪式因數分解法（英语：）

 |
|  |
| 整数分解 | 
* 連分數分解 (CFRAC)（英语：）
* Dixon's（英语：）
* Lenstra橢圓曲線 (ECM)（英语：）
* 欧拉因式分解法（英语：）
* 波拉德ρ算法（英语：）
* *p* − 1（英语：）
* *p* + 1（英语：）
* 二次篩選法
* 普通数域筛选法
* *特殊數域篩選法 (SNFS)（英语：）*
* 有理筛选法
* 费马因式分解法（英语：）
* Shanks二次形式（英语：）
* 试除法
* 秀爾演算法

 |
|  |
| 乘法算法 | 
* 古埃及乘算（英语：）
* 長乘法
* 卡拉楚巴算法
* 图姆-库克算法
* 頌哈吉-施特拉森演算法
* 富尔算法（英语：）

 |
|  |
| 歐幾里德除法除法算法 | 
* 二進制（英语：）
* 倍塊法（英语：）
* Fourier（英语：）
* Goldschmidt（英语：）
* Newton-Raphson（英语：）
* 長除法
* 短除法
* SRT

 |
|  |
| 离散对数 | 
* 大步小步算法
* 波拉德ρ算法
* Pollard kangaroo（英语：）
* Pohlig–Hellman（英语：）
* Index calculus（英语：）
* Function field sieve（英语：）

 |
|  |
| 最大公因數 | 
* 二进制最大公因数算法（英语：）
* 輾轉相除法
* 扩展欧几里得算法
* Lehmer's（英语：）

 |
|  |
| 二次剩余 | 
* Cipolla（英语：）
* Pocklington's（英语：）
* Tonelli–Shanks（英语：）
* Berlekamp（英语：）
* Kunerth（英语：）

 |
|  |
| 其他算法 | 
* Chakravala（英语：）
* Cornacchia（英语：）
* 整數關係（英语：）（LLL（英语：）；KZ（英语：））
* 平方求冪
* 整数平方根
* 模幂运算
* 蒙哥马利算法
* Schoof（英语：）
* 特拉亨伯格系統（英语：）

 |
|  |
| 
* *斜体*表示该算法只适用于特殊形式的数字

 |

 |