Euler_97.py (699B)
1 import sys 2 import math 3 from datetime import datetime 4 5 def find_last_x_digits(base, exponent, x): 6 mod = 10 ** x 7 exp = 1 8 squares = [] 9 squares.append(base % mod) 10 result = 1 11 12 while exp < exponent: 13 squares.append((squares[-1] ** 2) % mod) 14 exp = exp * 2 15 16 for i in range(len(squares)): 17 if (2 ** i) & exponent: 18 result = (result * squares[i]) % mod 19 20 return result 21 22 base = 2 23 exponent = 7830457 24 x = 10 25 26 a = datetime.now() 27 result = ((find_last_x_digits(base, exponent, x) * 28433) + 1) % (10 ** x) 28 c = datetime.now() - a 29 30 print result 31 print "total time: " + str(c.total_seconds()) 32 33 print find_last_x_digits(7777777, 7777777, 5)