Python 寻找卡迈克尔数

Python 寻找卡迈克尔数,python,algorithm,Python,Algorithm,我似乎不明白为什么我的python代码告诉我错误的卡迈克尔数。提前谢谢。我只是看不出算法中的错误 def isCarmichaelNumber( x ): for y in range(2,x): #check if prime if math.gcd (x, y) == 1: if pow(y, x-1, x) != 1: return False return True print(is

我似乎不明白为什么我的python代码告诉我错误的卡迈克尔数。提前谢谢。我只是看不出算法中的错误

def isCarmichaelNumber( x ):
    for y in range(2,x):
        #check if prime
        if math.gcd (x, y) == 1:
            if pow(y, x-1, x) != 1:
                return False
    return True

print(isCarmichaelNumber(1847))

您没有检查
x
是否为素数。根据定义,卡迈克尔数必须是复合数。对于任何素数
x
pow(y,x-1,x)==1
对于
范围(2,x)
中的所有
y
,因此将错误地返回
真值。1847是素数,这就是为什么你的函数声称它是卡迈克尔数

解决方法之一是:

def isCarmichaelNumber(x):
    import math
    isprime = True
    for y in range(2,x):
        if math.gcd(x, y) == 1:
            if pow(y, x-1, x) != 1:
                return False
        else:
            isprime = False
    return not isprime