Skip to content

Commit ceefd98

Browse files
committed
optimize karatsuba
1 parent 4ac5b9b commit ceefd98

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

sorting and basics/karatsuba.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ def karatsuba(x, y, b=10):
66
>>> karatsuba(1234223123412323, 1234534213423333123)
77
1523690672850721578619752112274729L
88
"""
9-
nx, ny = len(str(x))/2, len(str(y))/2
10-
if x < 1000 or y < 1000: return x * y
11-
m = nx if nx < ny else ny
12-
x1 = x / (b**m)
13-
x0 = x % (x1 * (b**m))
14-
y1 = y / (b**m)
15-
y0 = y % (y1 * (b**m))
16-
z1 = karatsuba(x1,y1,b)
17-
z3 = karatsuba(x0,y0,b)
9+
10+
if x < 1000 or y < 1000:
11+
return x * y
12+
m = min(len(str(x)) / 2, len(str(y)) / 2)
13+
bm = b**m
14+
x1, x0 = x / bm, x % bm
15+
y1, y0 = y / bm, y % bm
16+
z1 = karatsuba(x1, y1, b)
17+
z3 = karatsuba(x0, y0, b)
1818
z2 = karatsuba(x1 + x0, y1 + y0, b) - z1 - z3
19-
return (b**(2*m))*z1 + (b**m)*z2 + z3
19+
return (bm**2)*z1 + bm*z2 + z3
2020

2121
if __name__ == "__main__":
2222
import doctest

0 commit comments

Comments
 (0)