testSet = {2, 3, 7, 13, 61, 24251} defqpow(x, y, n): resu = 1 while (y > 0): if (y & 1 == 1): resu = (resu * x) % n y = y >> 1 x = (x * x) % n return resu
defMillerRabinTest(a, n, d, s): # True if it's likely to be a prime. if (n == 2or n == a): returnTrue if ((n & 1) == 0): returnFalse for r in xrange(s): if (qpow(a, d, n) == 1or (qpow(a, (1 << r) * d, n) in {-1, n - 1})): returnTrue returnFalse
defisPrime(x): global testSet if (x < 2): returnFalse tint = x - 1 s = 0 while (tint & 1 == 0): tint = tint >> 1 s = s + 1 for i in testSet: ifnot(MillerRabinTest(i, x, tint, s)): returnFalse returnTrue if (__name__ == "__main__"): import sys if (len(sys.argv) > 1): for i in sys.argv[1:]: try: print isPrime(int(i)) except BaseException: print"Illegal input" else: whileTrue: try: a = int(input(">>> ")) print isPrime(a) except KeyboardInterrupt: print"Bye!" sys.exit(0) except BaseException: print"Illegal input"