Я пытаюсь реализовать тест на простоту для реализации RSA, которую я пишу в качестве упражнения. В основном я использую Рабина-Миллера, но у меня есть решето Эратосфена, формулирующее список всех простых чисел до тысячи, чтобы использовать его для быстрого теста, чтобы определить, имеет ли кандидат одно из них в качестве простого множителя.
Соответствующая функция:
def comp_test(to_test, primeList):
for i in primeList:
if (to_test / float(i)) % 1 == 0:
return False
return True
Где PrimeList — это список простых чисел, сгенерированный решетом. Это отлично работает до значений to_test 2^55 или около того, но после этого значения
(to_test / float(i)) % 1
оператор всегда оценивается как 0,0, даже когда я передаю ему to_test, который Рабин-Миллер определил как простой. Я не уверен, что это может быть. Я не совсем понимаю, как Python обрабатывает очень большие числа, но, насколько мне известно, 2 ^ 55 не похоже на границу переполнения. С Sieve функция работает значительно быстрее, а генерация ключей для 2048-битной реализации, которую я собираюсь использовать, занимает некоторое время, поэтому, хотя это упражнение, я хотел бы посмотреть, смогу ли я заставить Sieve работать.
Заранее спасибо.