其实我不知道我是否真的理解了FFT,但是我会用FFT优化多项式乘法了QAQ。。
(以下大多摘自算导
前置知识
1. 多项式
在一个代数域F上,关于变量x的多项式定义为形式和形式表示的函数
A(x)=∑j=0n−1ajxj,其中a0…an−1为多项式各项的系数
2. 多项式的次数界
若多项式有非零系数的最高次项为 xk ,则称k为该多项式的次数,任何严格大于k的整数都是这个多项式的次数界。
3. 多项式的表示
(1)系数表示法
对于一个次数界为n的多项式A(x)来说,其系数表示法可以看做是一个列向量 a=(a0,a1,…,an−1) 。系数表示法对于某些多项式的计算很方便,如对多项式A(x)在给定点 x0 的求值运算就是计算A(x0)的值。如果使用霍纳法则,则求值运算的运行时间为 O(n) ,
A(x0)=a0+x0(a1+x0(a2+...+x0(an−2+x0(an−1))...))
另外,加法运算的时间复杂度是 O(n) ,暴力进行乘法运算的时间复杂度是 O(n2) 。
(2)点值表示法
有n个点 (x0,A(x0),),(x1,A(x1)),..,(xn−1,A(n−1)) ,当所有 xk 各不相同时,这n个点可以唯一表示一个次数界为n的多项式,但是一个次数界为n的多项式可以有多个点值表示。通俗一点说,已知一个多项式函数的n个函数值可以唯一确定这个函数,而知道这个函数可以知道不止n个函数值。
已知点值表示求系数表示称为插值,用拉格朗日插值法可以做到 O(n2) 。
若次数界为n的多项式A(x),B(x)的n个点的 xk 是对应相同的,点值表示法的加法操作时间复杂度是O(n),只要把对应A/B( xk )相加即可,若A(x),B(x)都已知 2n 个点,那把A/B( xk )相乘同样可以在 O(n) 时间内完成乘法运算。。
进入正题。。
1. 单位复根
n次单位复根是满足