Loading

【瞎口胡】多项式牛顿迭代

前言

如果完全不会求导和积分,以及泰勒展开,这里有一个实用性很强的教程 3blue1brown - 微积分的本质

多项式牛顿迭代

给定函数 \(G(x)\),求多项式 \(F(x)\) 使得 \(G(F(x)) \equiv 0 \pmod {x^n}\)

\(n=1\) 时,可以单独求出 \([x_0]F(x)\)(大部分问题中该解易求)。

考虑已经得到模 \(x^{\left \lceil \frac n2 \right \rceil}\) 意义下的解,如何求出模 \(x^n\) 意义下的解。

\(G(F(x))\)\(F_0(x)\) 处泰勒展开,有

\[\sum \limits_{i=0}^{+\infty} \dfrac{G^{(i)}(F_0(x))}{i!}(F(x)-F_0(x))^i \equiv 0 \pmod {x^n} \]

其中,\(G^{(i)}\) 表示 \(G\)\(i\)导函数

\(F(x)-F_0(x)\) 的最高次数非零项的次数肯定大于 \(\left \lceil \dfrac{n}{2} \right \rceil\),所有 \(i>1\) 的项在模 \(x^n\) 意义下都会变成 \(0\)

于是,上式等价于

\[G(F_0(x)) + G'(F_0(x))(F(x)-F_0(x)) \equiv 0 \pmod {x^n} \]

整理得

\[F(x) \equiv F_0(x) - \dfrac{G(F_0(x))}{G'(F_0(x))} \pmod {x^n} \]

应用 1 多项式求逆

给定 \(H(x)\)\(F(x)\) 使得 \(F(x)H(x) \equiv 1 \pmod {x^n}\)。(使用 \(H\) 是为了和多项式牛顿迭代中的 \(G\) 区分)

有方程

\[G(F(x)) \equiv \dfrac{1}{F(x)} - H(x) \equiv 0 \pmod {x^n} \]

牛顿迭代,得

\[F(x) \equiv F_0(x) - \dfrac{G(F_0(x))}{G'(F_0(x))} \pmod{x^n} \]

\[F(x) \equiv F_0(x) - \dfrac{\frac{1}{F_0(x)}-H(x)}{-\frac{1}{F_0^2(x)}} \pmod{x^n} \]

\[F(x) \equiv 2F_0(x)-F_0^2(x)H(x) \pmod{x^n} \]

\[F(x) \equiv F_0(x)(2-F_0(x)H(x)) \pmod{x^n} \]

递归求解即可。边界:\(n=0\) 时需要求解该项系数的乘法逆元。

应用 2 多项式开根

给定 \(H(x)\)\(F(x)\) 使得 \(F^2(x) \equiv 1 \pmod {x^n}\)

使用牛顿迭代,有方程

\[G(F(x)) \equiv F^2(x)-H(x) \equiv 0 \pmod {x^n} \]

\[F(x) \equiv F_0(x) - \dfrac{F_0^2(x)-H(x)}{2F_0(x)} \pmod{x^n} \]

\[F(x) \equiv F_0(x) +\dfrac{H(x)-F_0^2(x)}{2F_0(x)} \pmod{x^n} \]

\[F(x) \equiv \dfrac{H(x)+F_0^2(x)}{2F_0(x)} \pmod{x^n} \]

\[F(x) \equiv \dfrac 12\left(\dfrac{H(x)}{F_0(x)}+F_0(x) \right)\pmod{x^n} \]

每层求逆即可,复杂度不变。注意这个时候 NTT 要在模 \(x^{2n}\) 意义下做,因为 \(H(x),\dfrac{1}{F_0(x)}\) 在模 \(x^n\) 意义下都是 \(n-1\) 次多项式。

应用 3 多项式 exp

给定 \(H(x)\)\(F(x)\) 使得 \(\exp H(x) \equiv F(x) \pmod {x^n}\)

使用牛顿迭代,有方程

\[G(F(x)) \equiv \ln F(x) - H(x) \equiv 0 \pmod {x^n} \]

\[F(x) \equiv F_0(x) - \dfrac{\ln F_0(x) - H(x)}{\frac{1}{F_0(x)}} \pmod {x^n} \]

\[F(x) \equiv F_0(x)(1-\ln F_0(x) + H(x))\pmod {x^n} \]

\(n=0\) 的时候要检查 \([x^0]H(x)\) 是不是等于 \(0\),不是 \(0\) 就寄了,这种情况下 \(e^x\) 是个超越数,不能在模意义下被表示出来。同时注意,NTT 要在模 \(x^{2n}\) 意义下做。

posted @ 2022-09-01 17:12  Meatherm  阅读(69)  评论(0编辑  收藏  举报