ModestGenius

MIller_Rabin test

May 10th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.72 KB | None | 0 0
  1. import random
  2. import sys
  3.  
  4. def miller_rabin(n, k):
  5.     if n == 2:
  6.         return True
  7.  
  8.     if n % 2 == 0:
  9.         return False
  10.  
  11.     r, s = 0, n - 1
  12.     while s % 2 == 0:
  13.         r += 1
  14.         s //= 2
  15.     for _ in range(k):
  16.         a = random.randrange(2, n - 1)
  17.         x = pow(a, s, n)
  18.         if x == 1 or x == n - 1:
  19.             continue
  20.         for _ in range(r - 1):
  21.             x = pow(x, 2, n)
  22.             if x == n - 1:
  23.                 break
  24.         else:
  25.             return False
  26.     return True
  27.  
  28. if __name__ == '__main__':
  29.     t = int(sys.argv[1])
  30.     if(miller_rabin(t,t.bit_length())):
  31.         print('Number {} is prime'.format(t))
  32.     else:
  33.         print('Number {} is composite'.format(t))
Advertisement
Add Comment
Please, Sign In to add comment