📅  最后修改于: 2023-12-03 15:10:56.549000             🧑  作者: Mango
当我们需要检查一个数是否为质数时,常常会使用到N-1阶乘的余数是否为N-1的方法。这个方法的原理是基于费马小定理,即:对于任意质数p和整数a,a^p ≡ a(mod p)。
根据费马小定理,当p为质数时,对任意不是p的倍数的整数a,a^(p-1) ≡ 1(mod p)。因此,如果N-1不是质数,则存在一个比1小且不是1的整数b,使得b^(N-1) ≡ 1(mod N)。由此我们可以得知,如果N-1不是质数,则N-1阶乘的余数不会是N-1。
下面是一个示例的代码片段:
def is_prime(n):
"""
Check if n is prime using Fermat's Little Theorem
Args:
n (int): An integer to be checked
Returns:
bool: True if n is prime, False otherwise
"""
if n < 2:
return False
# Check if n is a perfect square
sqrt_n = int(n**0.5)
if sqrt_n**2 == n:
return False
# Check if n is a Carmichael number
if pow(2, n-1, n) != 1:
return False
# Check if n is a prime number
return pow(n-1, n-2, n) == 1
在这个示例中,我们使用pow函数计算N-1阶乘的余数,并检查是否等于N-1。同时,我们还加入了一些额外的判断,如判断N是否小于2、是否为完全平方数以及是否为卡迈克尔数。这些判断都是为了确保我们得到的结果是正确的质数判断结果。