Source code for titan_pylib.math.is_prime64

[docs] 1def is_prime64(n: int) -> bool: 2 # assert 1 <= n and n <= 1<<64 # = 18446744073709551616 3 if n == 1: 4 return False 5 if n == 2: 6 return True 7 if not n & 1: 8 return False 9 p = ( 10 (2, 7, 61) 11 if n < 1 << 30 12 else (2, 325, 9375, 28178, 450775, 9780504, 1795265022) 13 ) 14 d = n - 1 15 d >>= (d & -d).bit_length() - 1 16 for a in p: 17 if n <= a: 18 break 19 t = d 20 y = pow(a, t, n) 21 while t != n - 1 and y != 1 and y != n - 1: 22 y = y * y % n 23 t <<= 1 24 if y != n - 1 and not t & 1: 25 return False 26 return True