查找卡迈克尔编号

时间:2018-11-20 06:21:14

标签: python algorithm

我似乎无法弄清楚为什么我的python代码告诉我错误的carmichael编号。提前致谢。我只是看不到算法中的错误。

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))

1 个答案:

答案 0 :(得分:3)

您没有检查x是否为素数。根据定义,Carmichael数必须是复合的。对于x中所有pow(y, x-1, x) == 1的任何素数yrange(2, x)都会错误地返回True。 1847是质数,这就是为什么您的函数声称它是Carmichael数。

一种解决方法:

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