From: Tri-solaris Date: Fri, 1 Mar 2019 15:06:02 +0000 (+0800) Subject: feat: Update poly-inv.md X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=995526472e1366ce4d6c15a15447d52590f438d0;p=oi-wiki%2Fmain.git feat: Update poly-inv.md --- diff --git a/docs/math/poly-inv.md b/docs/math/poly-inv.md new file mode 100755 index 00000000..80ad1a1d --- /dev/null +++ b/docs/math/poly-inv.md @@ -0,0 +1,75 @@ +# Description + +给定多项式 $f\left(x\right)$,求 $f^{-1}\left(x\right)$. + +# Methods + +## 倍增法 + +首先,易知 + +$$\left[x^{0}\right]f^{-1}\left(x\right)=\left(\left[x^{0}\right]f\left(x\right)\right)^{-1}$$ + +假设现在已经求出了 $f\left(x\right)$ 在模 $x^{\left\lceil\frac{n}{2}\right\rceil}$ 意义下的逆元 $f^{-1}_{0}\left(x\right)$. +有: + +$$\begin{aligned} + f\left(x\right)f^{-1}_{0}\left(x\right)&\equiv 1 &\pmod{x^{\left\lceil\frac{n}{2}\right\rceil}}\\ + f\left(x\right)f^{-1}\left(x\right)&\equiv 1 &\pmod{x^{\left\lceil\frac{n}{2}\right\rceil}}\\ + f^{-1}\left(x\right)-f^{-1}_{0}\left(x\right)&\equiv 0 &\pmod{x^{\left\lceil\frac{n}{2}\right\rceil}} +\end{aligned}$$ + +两边平方可得: + +$$f^{-2}\left(x\right)-2f^{-1}\left(x\right)f^{-1}_{0}\left(x\right)+f^{-2}_{0}\left(x\right)\equiv 0 \pmod{x^{n}}$$ + +两边同乘 $f\left(x\right)$ 并移项可得: + +$$f^{-1}\left(x\right)\equiv f^{-1}_{0}\left(x\right)\left(2-f\left(x\right)f^{-1}_{0}\left(x\right)\right) \pmod{x^{n}}$$ + +递归计算即可. + +时间复杂度 + +$$T\left(n\right)=T\left(\frac{n}{2}\right)+O\left(n\log{n}\right)=O\left(n\log{n}\right)$$ + +## Newton's Method + +参见 [**Newton's Method**](../poly-newton/#inv). + +# Code + +??? " `poly-inv.cpp` " + + ```cpp + inline void cp(const Z*const&sl,const Z*const&sr,Z*const&dl,Z*const&dr){ + std::copy(sl,sr,dl); + if(sr-sl