karatsuba 乘法

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

还是很牛的

Leave a Reply

Your email address will not be published. Required fields are marked *