Кажется, я не могу понять, почему мой код 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 для всех y в range(2, x), поэтому неправильно вернет True. 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