mfgnik

Untitled

Jun 9th, 2020
740
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.00 KB | None | 0 0
  1. def gcd(a, b):
  2.     if b == 0:
  3.         return a
  4.     return gcd(b, a % b)
  5.  
  6.  
  7. def factorization(number):
  8.     prime_numbers = []
  9.     divisor = 2
  10.     while divisor ** 2 < number:
  11.         if number % divisor == 0:
  12.             count = 1
  13.             while number % divisor == 0:
  14.                 count += 1
  15.             prime_numbers.append([divisor, count])
  16.         divisor += 1
  17.     if number > 1:
  18.         prime_numbers.append([number, 1])
  19.  
  20.     return prime_numbers
  21.  
  22.  
  23. def modulo_pow(number, degree, modulo):
  24.     if degree == 0:
  25.         return 1
  26.     elif degree % 2:
  27.         return modulo_pow(number, degree - 1, modulo) * number % modulo
  28.     return modulo_pow(number * number % modulo, degree // 2, modulo) % modulo
  29.  
  30.  
  31. def inverse_num(m, a):
  32.     if gcd(m, a) != 1:
  33.         return -1
  34.     phi = 1
  35.     for prime in factorization(m):
  36.         phi *= ((prime[0] ** prime[1]) - (prime[0] ** (prime[1] - 1)))
  37.     return modulo_pow(a, phi - 1, m)
  38.  
  39.  
  40. m, a = map(int, input().split())
  41. print(inverse_num(m, a))
Advertisement
Add Comment
Please, Sign In to add comment