更快的多项式多点求值?
一个奇妙的科技
定义卷积矩阵\(M=\)
\[\begin{matrix}
a_0&0&0&...\\
a_1&a_0&0&...\\
a_2&a_1&a_0&...\\
...&...&...&...\\
\end{matrix}\]
显然,我们把多项式系数\(a_0,a_1...\)拿下来放到这个方阵中,另一个多项式写成列向量的形式,用此矩阵乘向量即是对另一个多项式模\(x^n\)意义下的多项式乘法
幂和矩阵:\(A=\)
\[\begin{matrix}
1&1&1&...\\
x_0&x_1&x_2&...\\
x_0^2&x_1^2&x_2^2&...\\
...&...&...&...\\
\end{matrix}\]
多点求值矩阵\(B=A^T\)
幂和可以分治FFT,通分即可
我们把分治FFT的过程拆开来看,我们令\(C_i\)为分治过程中\(i\)节点(看成线段树的结构)中所有多项式的乘积(即\(\prod_{i=l}^r(x-a_i)\))(写成方阵的形式)
幂和矩阵按分治FFT拆开:
\[M_i=M_{2i}C_{2i+1}+M_{2i+1}C_{2i}
\]
\(M_i\)表示我们幂和通分后只考虑\(l\sim r\)的\(a_j\)时的分子的多项式(写成方阵的形式),叶节点的\(M_i\)就是常数多项式\(F(x)=1\)对应方阵
\(A=QM_1\),Q是逆元多项式写成的卷积矩阵
我们把幂和的n个变量写成列向量x的形式
\(Ax\)则是幂和的答案
然后一步神仙操作,我们发现幂和多项式的转置就是多点求值多项式,于是\(A^Tx\)是我们要的
我们有\((AB)^T=B^TA^T\)
直接整个转置即可(把分治FFT的过程全反过来)
这时我们把矩阵展开,重新写成多项式,卷积多项式矩阵的转置乘向量写成卷积形式就是差卷积
只要求一次逆即可
复杂度依然\(O(nlog^2n)\),可以5e5多点求值~~~