Тест Лукаса-Лемера с использованием Python не работает для больших чисел - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь написать функцию, которая должна принимать число Мерсенна и возвращать, является ли оно простым числом или нет, используя критерий примитивности Лукаса-Лемера. Я пытаюсь вернуть последнее число, сгенерированное в последовательности Лукаса-Лемера, которое должно быть 0, если это простое число

Lucas Lehmer sequence

Я написал следующую функцию, чтобы сделать выше

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

...