下文及代码中所有提及某个函数是以n为界或者是n次的,意思是其最高次项次数n−1n-1n−1。
关于求逆,由牛顿迭代:F=G−1Fn+1=2Fn−Fn2GF=G^{-1}\\F_{n+1}=2F_n-F_n^2GF=G−1Fn+1=2Fn−Fn2G
关于多项式取模,A(x)以n为界,B(x)以m为界,需要求C(x)和D(x),使得C(x)的界是n-m+1,D(x)的界是m-1:
A(x)=B(x)C(x)+D(x)xn−1A(1x)=(xm−1B(1x))(xn−mC(1x))+xn−1D(1x)A(x)=B(x)C(x)+D(x)\\x^{n-1}A\left(\frac 1x\right)=\left(x^{m-1}B\left(\frac 1x\right)\right)\left(x^{n-m}C\left(\frac1x\right)\right)+x^{n-1}D\left(\frac 1x\right)A(x)=B(x)C(x)+D(x)xn−1A(x1)=(xm−1B(x1))(xn−mC(x1))+xn−1D(x1)
注意到xn−1D(1x) mod xn−m+1=0x^{n-1}D\left(\frac 1x\right)\bmod {x^{n-m+1}}=0xn−1D(x1)modxn−m+1=0,因此(设ATn(x)A^{T_n}(x)ATn(x)表示将A(x)A(x)A(x)以nnn为界翻转):
ATn(x)=BTm(x)CTn−m+1(x)(modxn−m+1)CTn−m+1(x)=ATn(x)(BTm(x))−1A^{T_{n}}(x)=B^{T_{m}}(x)C^{T_{n-m+1}}(x)\pmod {x^{n-m+1}}\\ C^{T_{n-m+1}}(x)=A^{T_{n}}(x)\left(B^{T_{m}}(x)\right)^{-1}ATn(x)=BTm(x)CTn−m+1(x)(modxn−m+1)CTn−m+1(x)=ATn(x)(BTm(x))−1
因此可以求出CCC,再通过一次乘法求出D即可。
多项式多点求值:
现在有一个以nnn为界的多项式A(x)A(x)A(x),以及mmm个位置x1,…,xmx_1,\dots,x_mx1,…,xm,求A(x1),…,A(xm)A(x_1),\dots,A(x_m)A(x1),…,A(xm)。
考虑分治,令L(x)=∏i=Lmid(x−xi),R(x)=∏i=mid+1R(x−xi)L(x)=\prod_{i=L}^{mid}(x-x_i),R(x)=\prod_{i=mid+1}^R(x-x_i)L(x)=∏i=Lmid(x−xi),R(x)=∏