From: Tri-solaris Date: Fri, 1 Mar 2019 15:28:01 +0000 (+0800) Subject: Update poly-newton.md X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=bfccd9e693142baea0731a1eba8912a81b0ab5b7;p=oi-wiki%2Fmain.git Update poly-newton.md --- diff --git a/docs/math/poly-ln-exp.md b/docs/math/poly-ln-exp.md deleted file mode 100755 index 95937b00..00000000 --- a/docs/math/poly-ln-exp.md +++ /dev/null @@ -1,137 +0,0 @@ -# Description - -给定多项式 $f\left(x\right)$,求模 $x^{n}$ 意义下的 $\ln{f\left(x\right)}$ 与 $\exp{f\left(x\right)}$. - -# Methods - -## 普通方法 - ---- - -首先,对于多项式 $f\left(x\right)$,若 $\ln{f\left(x\right)}$ 存在,则由其[定义](../#ln-exp),其必须满足: - -$$\left[x^{0}\right]f\left(x\right)=1$$ - -对 $\ln{f\left(x\right)}$ 求导再积分,可得: - -$$\begin{aligned} - \left(\ln{f\left(x\right)}\right)'&\equiv\frac{f'\left(x\right)}{f\left(x\right)}&\pmod{x^{n}}\\ - \ln{f\left(x\right)}&\equiv\int\frac{f'\left(x\right)}{f\left(x\right)}&\pmod{x^{n}} -\end{aligned}$$ - -多项式的求导,积分时间复杂度为 $O\left(n\right)$,求逆时间复杂度为 $O\left(n\log{n}\right)$,故多项式求 $\ln$ 时间复杂度 $O\left(n\log{n}\right)$. - ---- - -首先,对于多项式$f\left(x\right)$,若 $\exp{f\left(x\right)}$ 存在,则其必须满足: - -$$\left[x^{0}\right]f\left(x\right)=0$$ - -否则 $\exp{f\left(x\right)}$ 的常数项不收敛. - -对 $\exp{f\left(x\right)}$ 求导,可得: - -$$\exp'{f\left(x\right)}\equiv\exp{f\left(x\right)}f'\left(x\right)\pmod{x^{n}}$$ - -比较两边系数可得: - -$$\left(n+1\right)\left[x^{n}\right]\exp{f\left(x\right)}=\sum_{i=0}^{n}\left[x^{i}\right]\exp{f\left(x\right)}\left(n-i+1\right)\left[x^{n-i}\right]f\left(x\right)$$ - -又 $\left[x^{0}\right]f\left(x\right)=0$,则: - -$$\left(n+1\right)\left[x^{n}\right]\exp{f\left(x\right)}=\sum_{i=0}^{n-1}\left[x^{i}\right]\exp{f\left(x\right)}\left(n-i+1\right)\left[x^{n-i}\right]f\left(x\right)$$ - -使用分治 FFT 即可解决. - -时间复杂度 $O\left(n\log^{2}{n}\right)$. - -## Newton's Method - -使用 [**Newton's Method**](../poly-newton/#exp) 即可在 $O\left(n\log{n}\right)$ 的时间复杂度内解决多项式 $\exp$. - -# Code - -??? " `poly-ln-exp.cpp` " - - ```cpp - using Z=int; - using mZ=long long; - using poly_t=Z[mxdg]; - using poly=Z*const; - - void polyder(const poly&f,poly&df,const int&n){ - for(int i=1;i!=n;++i) - df[i-1]=(mZ)f[i]*i%p; - df[n-1]=0; - } - - void polyint(const poly&f,poly&intf,const int&n){ - for(int i=n-1;i;--i) - intf[i]=(mZ)f[i-1]*inv[i]%p; - intf[0]=0; - } - - void polyln(const poly&h,poly&f,const int&n){ - static poly_t ln_t; - assert(h[0]==1); - const int n2=n<<1; - - polyder(h,f,n); - std::fill(f+n,f+n2,0); - polyinv(h,ln_t,n); - - DFT(f,n2);DFT(ln_t,n2); - for(int i=0;i!=n2;++i) - f[i]=(mZ)f[i]*ln_t[i]%p; - IDFT(f,n2); - - polyint(f,f,n); - std::fill(f+n,f+n2,0); - } - - void polyexp(const poly&h,poly&f,const int&n){ - static poly_t exp_t; - assert(h[0]==0); - std::fill(f,f+n+n,0); - f[0]=1; - for(int t=1;(1<[多项式求逆](../poly-inv) + +设给定函数为 $h\left(x\right)$,有方程: + +$$g\left(f\left(x\right)\right)=\frac{1}{f\left(x\right)}-h\left(x\right)\equiv 0\pmod{x^{n}}$$ + +应用 Newton's Method 可得: + +$$\begin{aligned} + f\left(x\right)&\equiv f_{0}\left(x\right)-\frac{\frac{1}{f_{0}\left(x\right)}-h\left(x\right)}{-\frac{1}{f_{0}^{2}\left(x\right)}}&\pmod{x^{n}}\\ + &\equiv 2f_{0}\left(x\right)-f_{0}^{2}\left(x\right)h\left(x\right)&\pmod{x^{n}} +\end{aligned}$$ + +时间复杂度 + +$$T\left(n\right)=T\left(\frac{n}{2}\right)+O\left(n\log{n}\right)=O\left(n\log{n}\right)$$ + +## [多项式开方](../poly-sqrt) + +设给定函数为 $h\left(x\right)$,有方程: + +$$g\left(f\left(x\right)\right)=f^{2}\left(x\right)-h\left(x\right)\equiv 0\pmod{x^{n}}$$ + +应用 Newton's Method 可得: + +$$\begin{aligned} + f\left(x\right)&\equiv f_{0}\left(x\right)-\frac{f_{0}^{2}\left(x\right)-h\left(x\right)}{2f_{0}\left(x\right)}&\pmod{x^{n}}\\ + &\equiv\frac{f_{0}^{2}\left(x\right)+h\left(x\right)}{2f_{0}\left(x\right)}&\pmod{x^{n}} +\end{aligned}$$ + +时间复杂度 + +$$T\left(n\right)=T\left(\frac{n}{2}\right)+O\left(n\log{n}\right)=O\left(n\log{n}\right)$$ + +## [多项式 exp](../poly-exp) + +设给定函数为 $h\left(x\right)$,有方程: + +$$g\left(f\left(x\right)\right)=\ln{f\left(x\right)}-h\left(x\right)\pmod{x^{n}}$$ + +应用 Newton's Method 可得: + +$$\begin{aligned} + f\left(x\right)&\equiv f_{0}\left(x\right)-\frac{\ln{f_{0}\left(x\right)}-h\left(x\right)}{\frac{1}{f_{0}\left(x\right)}}&\pmod{x^{n}}\\ + &\equiv f_{0}\left(x\right)\left(1-\ln{f_{0}\left(x\right)+h\left(x\right)}\right)&\pmod{x^{n}} +\end{aligned}$$ + +时间复杂度 + +$$T\left(n\right)=T\left(\frac{n}{2}\right)+O\left(n\log{n}\right)=O\left(n\log{n}\right)$$ + + + + + + + + + + + + + + diff --git a/mkdocs.yml b/mkdocs.yml index e364ab6a..9b5e2eb6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -122,7 +122,7 @@ nav: - 快速傅里叶变换: math/fft.md - 快速数论变换: math/ntt.md - 快速沃尔什变换: math/fwt.md - - 多项式对数函数|指数函数: math/poly-ln-exp.md + - 多项式牛顿迭代: math/poly-newton.md - 组合数学: - 排列组合: math/combination.md - 卡特兰数: math/catalan.md