karatsuba 是一种快速乘法,主要是采用了一种分治的思想来进行大数的乘法,其教程和证明可见 https://blog.csdn.net/qj30212/…
其 Python 代码如下
def karatsuba(num1, num2):
if (num1 < 10 or num2 < 10):
return num1 * num2
num1Str = str(num1)
num2Str = str(num2)
maxLength = max(len(num1Str), len(num2Str))
splitPosition = maxLength / 2
high1, low1 = int(num1Str[:splitPosition]), int(num1Str[splitPosition:])
high2, low2 = int(num2Str[:splitPosition]), int(num2Str[splitPosition:])
z0 = karatsuba(low1, low2)
z1 = karatsuba((low1 + high1), (low2 + high2))
z2 = karatsuba(high1, high2)
return (z2 * (10 ** (2 * splitPosition))) + ((z1 - z2 - z0) * (10 ** (splitPosition))) + z0
还是很牛的