Advertisement
DarkPotatoKing

Miller-Rabin Primality Test.py

Jul 22nd, 2014
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.97 KB | None | 0 0
  1. #Code copy-pasted from http://jeremykun.com/2013/06/16/miller-rabin-primality-test/
  2. #July 23, 2014 3:34 AM (GMT +8)
  3.  
  4. import random
  5.  
  6. def decompose(n):
  7.    exponentOfTwo = 0
  8.  
  9.    while n % 2 == 0:
  10.       n = n/2
  11.       exponentOfTwo += 1
  12.  
  13.    return exponentOfTwo, n
  14.  
  15. def isWitness(possibleWitness, p, exponent, remainder):
  16.    possibleWitness = pow(possibleWitness, remainder, p)
  17.  
  18.    if possibleWitness == 1 or possibleWitness == p - 1:
  19.       return False
  20.  
  21.    for _ in range(exponent):
  22.       possibleWitness = pow(possibleWitness, 2, p)
  23.  
  24.       if possibleWitness == p - 1:
  25.          return False
  26.  
  27.    return True
  28.  
  29. def probablyPrime(p, accuracy=100):
  30.    if p == 2 or p == 3: return True
  31.    if p < 2: return False
  32.  
  33.    numTries = 0
  34.    exponent, remainder = decompose(p - 1)
  35.  
  36.    for _ in range(accuracy):
  37.       possibleWitness = random.randint(2, p - 2)
  38.       if isWitness(possibleWitness, p, exponent, remainder):
  39.          return False
  40.  
  41.    return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement