diff --git a/modular_exponentiation.py b/modular_exponentiation.py index 49dc8e7..7a6683b 100644 --- a/modular_exponentiation.py +++ b/modular_exponentiation.py @@ -3,10 +3,24 @@ import sys def mod_exp(x, y, m): k = x % m - for i in range(y): - print(i) - k = (k * x) % m - return k + results = {} + return exp_m(results, k, y, m) + +def exp_m(results, k, y, m): + if y in results: + return results[y] + else: + if k == 1: + ret = 1 + elif y == 0: + ret = 1 + elif y == 1: + ret = k + else: + h = y // 2 + ret = (exp_m(results, k, h, m) % m * exp_m(results, k, y - h, m) % m) % m + results[y] = ret + return ret line = sys.stdin.readline().split() x = int(line[0])