📜  检查数字是否为Euler Pseudoprime(1)

📅  最后修改于: 2023-12-03 14:55:46.567000             🧑  作者: Mango

检查数字是否为Euler Pseudoprime

当涉及到素数测试时,Euler伪素数测试是一种流行的方法。在这个测试中,我们检查一个数是否为Euler伪素数。一个大于2的整数 $n$ 是Euler伪素数,如果:

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

其中 $a$ 是 $1$ 到 $n-1$ 之间的一个随机整数,并且 $a$ 与 $n$ 互质。

Python 实现该测试非常简单:

def is_euler_pseudoprime(n: int) -> bool:
    for a in range(2, n):
        if pow(a, n-1, n) != 1:
            return False
        if math.gcd(a, n) != 1:
            return False
    return True

上述代码中,我们使用了 算术运算符 pow() 来计算 $a^{n-1} \pmod n$。我们还使用了 gcd() 函数来计算 $a$ 和 $n$ 之间的最大公约数,以确保 $a$ 和 $n$ 互质。

我们可以通过下面几组测试用例来测试以上实现的效果:

>>> is_euler_pseudoprime(561)
True
>>> is_euler_pseudoprime(1105)
True
>>> is_euler_pseudoprime(1729)
True
>>> is_euler_pseudoprime(2465)
True
>>> is_euler_pseudoprime(2821)
True
>>> is_euler_pseudoprime(6601)
True

关于 Euler 伪素数测试的更多信息,可以参考维基百科的 Euler 伪素数 页面。