hesham-rsa/MillerRabin.py

33 lines
705 B
Python
Raw Permalink Normal View History

2020-12-12 00:26:02 +01:00
2021-01-30 11:03:57 +01:00
# Copyright (C) 2019-2021 Hesham T. Banafa
2020-12-12 00:26:02 +01:00
#From: https://stackoverflow.com/questions/17298130/working-with-large-primes-in-python
from random import randrange
def is_prime(n, k=10):
if n == 2:
return True
if not n & 1:
return False
def check(a, s, d, n):
x = pow(a, d, n)
if x == 1:
return True
for i in range(s - 1):
if x == n - 1:
return True
x = pow(x, 2, n)
return x == n - 1
s = 0
d = n - 1
while d % 2 == 0:
d >>= 1
s += 1
for i in range(k):
a = randrange(2, n - 1)
if not check(a, s, d, n):
return False
return True