📜  卢卡斯原始性测试(1)

📅  最后修改于: 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$ 时数据溢出。

参考资料