我似乎无法弄清楚为什么我的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))
答案 0 :(得分:3)
您没有检查x
是否为素数。根据定义,Carmichael数必须是复合的。对于x
中所有pow(y, x-1, x) == 1
的任何素数y
,range(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