算术
Karatsuba 乘法
假定 是 位数,不妨假定 是偶数,那么 可以拆成两个部分。 那么 其中 那么可以再省去一次乘法。
Karatsuba 就是根据上述的性质来实现乘法的。整个算法是递归的。
如果 n == 1
,那么直接计算 x * y
并返回。
否则按照之前的描述分别拆成 a, b
和 c, d
两个部分。分别计算 ac = a * c
bd = b * d
,为了方便描述中间部分,引入一些变量,p = a + b, q = c + d
,那么 adbc = p * q - ac - bd
。那么最终结果是 pow(10, n) * ac + pow(10, n / 2) * adbc + bd
。
具体实现可以参考 BigInteger.cc。