# Copyright (C) 2019, 2020 Hesham T. Banafa #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