序言
在某些场合,我们可能需要使用远超内置整型范围的整数进行运算,比如公钥加密等。如果使用最原始的竖式计算,那么时间复杂度是 T(n2) ,其中n是相乘的两个整数的位数。使用Karatsuba算法优化,时间复杂度可以降至 T(nlog23)≈T(n1.585) 。而如果使用快速傅里叶变换(FFT),则可以优化到 T(nlogn) 。
原理
整数乘法与多项式
一个整数,我们可以把它表示成一个多项式。比如长度为n的十进制整数 a0a1a2a3...an−1 写成多项式:
A(x)=a0xn−1+a1xn−2+...+an−2x+an−1
整数2345,写成多项式就是:
A(x)=2x3+3x2+4x+5
这样一来,整数乘法就变成了多项式的乘法。比如2345*123,就变成了:
×+=2x5+2x5+4x4+