1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import time
import gmpy2
from gmpy2 import mpz
start = time.time()
def karatsuba(m, n):
if (m < 10 or n < 10):
return m * n
else:
mstring = str(mpz.num_digits(mpz(m)))
nstring = str(mpz.num_digits(mpz(n)))
k = max(len(mstring), len(nstring))
mid = int(k / 2)
a = int(mstring[:-mid])
c = int(nstring[:-mid])
b = int(mstring[-mid:])
d = int(nstring[-mid:])
ac = karatsuba(a, c)
bd = karatsuba(b, d)
ad_plus_bc = karatsuba(a + b, c + d) - ac - bd
return ac * 10 ** (2 * mid) + ad_plus_bc * 10 ** (mid) + bd
print("Answer is:")
print(karatsuba(pow(mpz(2), mpz(12528)), pow(mpz(2), mpz(12527))))
end = time.time()
print(end - start) |
Partager