Karatsuba 乘法是一种快速的乘法算法,它是由 Anatolii Alexeevitch Karatsuba 在 1960 年发现,并且在 1962 年公开发表的算法。 传统的高精度乘法复杂度会达到 n2,而 Karatsuba 乘法则是基于分治策略,复杂度是 3nlog23,近似值大约为 3n1.585

首先,假设在 B 进制下有两个大整数 a,b,现在我们要计算 ab 我们可以将其写成 a=a0Bm+a1b=b0Bm+b1 其中 m 是最小的正整数使得 a0,a1,b0,b1<Bm,也就是把 a,b 切成了均匀两半,之后注意到

ab=(a0Bm+a1)(b0Bm+b1)=a0b0B2m+(a0b1+b0a1)Bm+a1b1=a0b0B2m+(a0+a1)(b0+b1)Bm(a0b0+a1b1)Bm+a1b1

到了最后一步,我们发现只需要计算三次乘法 a0b0,a1b1,(a0+a1)(b0+b1) 以及六次加法。这样复杂度就变为 T(n)=3T(n2)+6n=O(nlog23) 当然这个方法也可以用来计算多项式乘法,你只要认为 B 是多项式的形式变量就好了(而且还不用像高精度那样写个加减进位退位似乎更好写)