设要求c=a·b,其中a的第i位为,b、c类似。
从系数序列的角度看,将a表示为系数序列,A=fft(a),b、c类似,则根据乘法计算法则,c=a*b(a与b的卷积)。卷积可以通过fft来计算,即C = fft(a*b)=A·B,c=ifft(C)。由于fft的时间复杂度为o(nlog n),故两个n位数乘法的时间复杂度为o(nlog n)。
求fft(a)实际上是在求多项式在x=1,
,
,...,
处的值,其中
,故也可以从多项式的角度看。
从多项式的角度看,a用多项式表示为。如果能高效地求出
在某n个点处的取值,就能将这几个点分别对应相乘,求出
在n个点处的取值,再用某种插值算法求出c多项式的系数,即可求出c。通过从系数序列角度启发,我们知道确实有这样的n个点,即x=1,
,
,...,
,能够高效地求出这些点的取值(fft)。求出c对应的多项式在这n个点处的取值后,我们又发现当已知 x=1,
,
,...,
处点的取值时,确实存在高效的插值算法(ifft),能求出c多项式的系数。
由多项式求n个特定点取值的算法和由n个特定点取值求多项式系数的算法,利用了复数的性质,本质上跟fft和ifft差不多,所以上面是从两个角度理解了快速计算大数乘法的原理。