📜  纽曼–肖恩斯–威廉斯素数(1)

📅  最后修改于: 2023-12-03 15:27:32.981000             🧑  作者: Mango

新曼-肖恩斯-威廉斯素数

新曼-肖恩斯-威廉斯素数(Noble prime),也称为安全素数(Safe prime),是指形如 $p=2q+1$ 的质数 $p$(其中 $q$ 也是质数)。

这个概念的名称源自于三位数学家:Erich Eduard Lycklama à Nijeholt(1845-1912),Petr Alexandrovich Noble(1864-1920)和Émile Léonard Mathieu(1835-1890)。

数学原理

新曼-肖恩斯-威廉斯素数的数学原理比较简单。首先,我们可以用欧拉定理推导出:

$$a^{p-1} \equiv 1 \pmod{p}$$

其中 $a$ 是与 $p$ 互质的整数。

如果将 $p$ 写成 $p=2q+1$ 的形式,并将 $a=2$ 代入上面的等式中,我们可以得到:

$$2^{p-1} \equiv 1 \pmod{p}$$

根据费马小定理,如果 $q$ 也是质数,那么 $2^q \equiv 2 \pmod{q}$,所以:

$$2^{2q} \equiv 2^2 \pmod{q}$$

又因为 $p=2q+1$ 是质数,所以 $q$ 必须是奇数,于是我们可以写成:

$$2^{2q} \equiv 4 \pmod{p}$$

根据欧拉定理,我们又可以推导出:

$$2^{p-1} \equiv 2^{2q} \equiv 4 \pmod{p}$$

因此,如果 $p=2q+1$ 是质数,并且 $q$ 也是质数,那么 $p$ 就是新曼-肖恩斯-威廉斯素数。

应用场景

新曼-肖恩斯-威廉斯素数在密码学中有着重要的应用。因为新曼-肖恩斯-威廉斯素数的特殊性质,可以用来生成大的素数,以用于密码学中的RSA算法、Diffe-Hellman密钥交换协议等。

此外,新曼-肖恩斯-威廉斯素数还能够用于解决数学难题,例如,证明 Weak Mertens Conjecture(弱 Mertens 猜想)中的一个特殊情况。

代码实现

在 Python 中,判断一个数是否为新曼-肖恩斯-威廉斯素数可以使用如下代码:

def is_noble_prime(p):
    if not is_prime(p):
        return False
    q = (p - 1) // 2
    return is_prime(q) and (2 * q + 1) == p

其中 is_prime(p) 用于判断一个数是否是质数。

参考文献: