OSDN Git Service

Update poly-newton.md
authorTri-solaris <trisolaris@126.com>
Fri, 1 Mar 2019 15:28:01 +0000 (23:28 +0800)
committerTri-solaris <trisolaris@126.com>
Fri, 1 Mar 2019 15:28:01 +0000 (23:28 +0800)
docs/math/poly-ln-exp.md [deleted file]
docs/math/poly-newton.md [new file with mode: 0644]
mkdocs.yml

diff --git a/docs/math/poly-ln-exp.md b/docs/math/poly-ln-exp.md
deleted file mode 100755 (executable)
index 95937b0..0000000
+++ /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<<t)<=n;++t){
-            const int deg1=1<<t,deg2=deg1<<1;
-
-            polyln(f,exp_t,deg1);
-            exp_t[0]=sub(h[0]+1,exp_t[0]);
-            for(int i=1;i!=deg1;++i)
-                exp_t[i]=sub(h[i],exp_t[i]);
-            std::fill(exp_t+deg1,exp_t+deg2,0);
-
-            DFT(f,deg2);DFT(exp_t,deg2);
-            for(int i=0;i!=deg2;++i)
-                f[i]=(mZ)f[i]*exp_t[i]%p;
-            IDFT(f,deg2);
-
-            std::fill(f+deg1,f+deg2,0);
-        }
-    }
-    ```
-
-# Examples
-
-1. 计算 $f^{k}\left(x\right)$
-
-普通做法为多项式快速幂,时间复杂度 $O\left(n\log{n}\log{k}\right)$.
-
-当 $\left[x^{0}\right]f\left(x\right)=1$ 时,有:
-
-$$f^{k}\left(x\right)=\exp{\left(k\ln{f\left(x\right)}\right)}$$
-
-当 $\left[x^{0}\right]f\left(x\right)\neq 1$ 时,设 $f\left(x\right)$ 的最低次项为 $f_{i}x^{i}$,则:
-
-$$f^{k}\left(x\right)=f_{i}^{k}x^{ik}\exp{\left(k\ln{\frac{f\left(x\right)}{f_{i}x^{i}}}\right)}$$ 
-
-时间复杂度 $O\left(n\log{n}\right)$.
-
-
-
-
-
-
-
diff --git a/docs/math/poly-newton.md b/docs/math/poly-newton.md
new file mode 100644 (file)
index 0000000..fe45c45
--- /dev/null
@@ -0,0 +1,95 @@
+# Description
+
+给定多项式 $g\left(x\right)$,已知有 $f\left(x\right)$ 满足:
+
+$$g\left(f\left(x\right)\right)\equiv 0\pmod{x^{n}}$$
+
+求出模 $x^{n}$ 意义下的 $f\left(x\right)$.
+
+# Newton's Method
+
+考虑倍增.
+
+首先当 $n=1$ 时,$\left[x^{0}\right]g\left(f\left(x\right)\right)=0$ 的解需要单独求出.
+
+假设现在已经得到了模 $x^{\left\lceil\frac{n}{2}\right\rceil}$ 意义下的解 $f_{0}\left(x\right)$,要求模 $x^{n}$ 意义下的解 $f\left(x\right)$.
+
+将 $g\left(f\left(x\right)\right)$ 在 $f_{0}\left(x\right)$ 处进行泰勒展开,有:
+
+$$\sum_{i=0}^{+\infty}\frac{g^{\left(i\right)}\left(f_{0}\left(x\right)\right)}{i!}\left(f\left(x\right)-f_{0}\left(x\right)\right)^{i}\equiv 0\pmod{x^{n}}$$
+
+因为 $f\left(x\right)-f_{0}\left(x\right)$ 的最低非零项次数最低为 $\left\lceil\frac{n}{2}\right\rceil$,故有:
+
+$$\forall 2\leqslant i:\left(f\left(x\right)-f_{0}\left(x\right)\right)^{i}\equiv 0\pmod{x^{n}}$$
+
+则:
+
+$$\sum_{i=0}^{+\infty}\frac{g^{\left(i\right)}\left(f_{0}\left(x\right)\right)}{i!}\left(f\left(x\right)-f_{0}\left(x\right)\right)^{i}\equiv g\left(f_{0}\left(x\right)\right)+g'\left(f_{0}\left(x\right)\right)\left(f\left(x\right)-f_{0}\left(x\right)\right)\equiv 0\pmod{x^{n}}$$
+$$f\left(x\right)\equiv f_{0}\left(x\right)-\frac{g\left(f_{0}\left(x\right)\right)}{g'\left(f_{0}\left(x\right)\right)}\pmod{x^{n}}$$
+
+# Examples
+
+## <span id="inv">[多项式求逆](../poly-inv)</span>
+
+设给定函数为 $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)$$
+
+## <span id="sqrt">[多项式开方](../poly-sqrt)</span>
+
+设给定函数为 $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)$$
+
+## <span id="exp">[多项式 exp](../poly-exp)</span>
+
+设给定函数为 $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)$$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index e364ab6..9b5e2eb 100644 (file)
@@ -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