多项式理论 PartⅠ- 浅谈多项式牛顿迭代、多项式取模以及 Bostan-Mori 算法
一、多项式牛顿迭代
适用于解决给定满足一定条件的 \(F\),求多项式 \(G\) 使得 \(F(G(x))\equiv0\) 的问题。
已知 \(F(G(x))\equiv 0\pmod{x^N}\),其中 \(F\) 可以泰勒展开且 \(G\) 常数项容易求得,则可以利用如下方式由 \(G\bmod{x^n}\) 推出 \(G\bmod{x^{2n}}\),进而迭代出 \(G\):
- 设 \(G_1\equiv G\pmod{x^n},G_2\equiv G\pmod{x^{2n}}\),则 \(G_2-G_1\equiv0\pmod{x^n}\),故 \((G_2-G_1)^2\equiv0\pmod{x^{2n}}\)。
- 由泰勒展开公式知 \(F(G_2(x))\equiv\sum\limits_{n=0}\dfrac{F^{(n)}(G_1(x))}{n!}\left(G_2(x)-G_1(x)\right)^n\pmod{x^{2n}}\),其中 \(n\ge2\) 时对应项取余后为 \(0\)。
- 所以可以得到 \(F(G_2(x))\equiv F(G_1(x))+F'(G_1(x))(G_2(x)-G_1(x))\pmod{x^{2n}}\),由 \(F(G_2(x))\equiv0\) 可以得到:
即可用其求出与 \(F\) 同阶且满足要求的 \(G\),对常见的 \(F\) 时间复杂度为 \(\mathcal{O}(n\log n)\),其中 \(n\) 为 \(F\) 的阶数。
二、多项式取模
适用于解决已知多项式 \(F(x),G(x)\),求 \(Q(x),R(x)\) 使得 \(F(x)=G(x)\cdot Q(x)+R(x)\) 的问题,其中 \(R\) 的阶数小于 \(G\)。
只需求出 \(Q\) 后即可简易求出 \(R\),令 \(n,m\) 分别为 \(F,G\) 的阶数,并强制让 \(R\) 的阶数为 \(m-1\),并记 \(F_R\) 表示 \(F\) 系数翻转后的结果,则 \(F_R(x)=x^nF\left(\dfrac{1}{x}\right)\),又由 \(F\left(\dfrac{1}{x}\right)=G\left(\dfrac{1}{x}\right)\cdot Q\left(\dfrac{1}{x}\right)+R\left(\dfrac{1}{x}\right)\) 有 \(F_R(x)=G_R(x)\cdot Q_R(x)+x^{n-m+1}R_R(x)\),故 \(Q_R\equiv F_R(x)\cdot G_R^{-1}(x)\pmod{x^{n-m+1}}\),至此问题已经解决,时间复杂度为 \(\mathcal{O}(n\log n)\)(视 \(n,m\) 同阶)。
三、Bostan-Mori 算法
适用于给定多项式 \(F,G\) 和所求项数 \(n\),求 \([x^n]\dfrac{F(x)}{G(x)}\) 的值。
有 \([x^n]\dfrac{F(x)}{G(x)}=[x^n]\dfrac{F(x)G(-x)}{G(x)G(-x)}\),观察到 \(G(x)G(-x)\) 只在偶数次幂有值,故将 \(F(x)G(-x)\) 拆成 \(P(x^2)+xQ(x^2)\) 的形式,并设 \(G(x)G(-x)=T(x^2)\),则所求为 \([x^n]\dfrac{P(x^2)+xQ(x^2)}{T(x^2)}\),根据 \(n\) 的奇偶性递归计算即可,时间复杂度为 \(\mathcal{O}(m\log n\log m)\),其中 \(m=\deg F\)。