Я пытаюсь написать функцию, которая должна принимать число Мерсенна и возвращать, является ли оно простым числом или нет, используя критерий примитивности Лукаса-Лемера. Я пытаюсь вернуть последнее число, сгенерированное в последовательности Лукаса-Лемера, которое должно быть 0, если это простое число
Я написал следующую функцию, чтобы сделать выше
def lucas_lehmer_modified(p):
M=2**p-1
for i in range (0,p-1):
if i == 0:
x = 4
else :
x = (prev**2-2)%(M)
prev=x
return x
Моя проблема в том, что этот код работает для небольших чисел, таких как 127
, но не для больших чисел, таких как 2305843009213693951
и даже для 524287
. Мой Python ноутбук Jupyter зависает. Любой совет, как я могу получить функцию, которая принимает простое число Мерсенна в качестве входных данных и возвращает ли это простое число или нет, используя тест Лукаса Лемера. Мне нужно, чтобы это работало по крайней мере 2^65-1