📅  最后修改于: 2023-12-03 14:50:30.097000             🧑  作者: Mango
卢卡斯原始性测试(Lucas-Lehmer test)是一种用于判断梅森素数的测试方法。梅森素数指的是形如 $2^p-1$ 的素数,其中 $p$ 也必须是个素数。例如,$2^3-1 = 7$ 就是一个梅森素数。
卢卡斯原始性测试的核心是利用了一个递推公式:
$$ x_{n+1} = x_n^2 - 2 $$
其中 $x_0 = 4$。这个递推公式可以递归地求出 $x_{p-2}$ 的值,然后判断 $2^p-1$ 是否能整除它。
具体地,我们先定义 $s_0 = 4$,然后逐步计算
$$ s_n = \begin{cases} 2 & (n = 0) \ s_{n-1}^2 - 2 & (n > 0) \end{cases} $$
最后,如果 $2^p-1$ 能整除 $s_{p-2}$,则 $p$ 是一个梅森素数,否则不是。
具体实现代码如下(以 Python 为例):
def lucas_lehmer(p: int) -> bool:
if p == 2:
return True
s = 4
m = (1 << p) - 1
for _ in range(p - 2):
s = (s * s - 2) % m
return s == 0
注意这里使用了取模运算,以避免在计算 $s_n$ 时数据溢出。