Polynomial Techniques(TBD)

Polynomial Techniques

多项式技术。

本来叫做多项式理论的,但仔细审视发现并没有太多值得被称作理论的东西:全都是多项式环内的计算技术。

算了。本来就是为计数理论生成函数服务的技术。由更深的视点再写多项式理论吧。

Polynomial

定义:多项式域。加减乘除求导积分。

Fourier Transform

系数表示。代数基本定理。点值表示。

单位根。消去引理。折半引理。

变换矩阵。范德蒙德矩阵。逆矩阵。

Number Theory Transform

使用原根。

Convolution

多项式乘法的卷积表示。

Inverse of a Polynomial

多项式 $ (AB \equiv 1)(x) \pmod{x^n} $ ,知 $ A $ 求 $ B $.

考虑倍增。易有 $ B_1 \equiv ([x^0]A)^{-1} \pmod {x^1} $.

我们已经有 $ AB_n-1 \equiv 0 \pmod {x^n} $ ,接下来

$$ \begin{aligned} (AB_n-1)^2 \equiv 0\pmod{x^{2n}} \\ A^2B_n^2-2AB_n+1\equiv 0 \pmod {x^{2n}} \\ B_{2n}(A^2B_n^2-2AB_n+1)\equiv 0 \pmod {x^{2n}} \\ B_{2n} \equiv 2B_n-AB_n^2 \pmod {x^{2n}} \end{aligned} $$

这样我们就求出了一个多项式的逆元。

复杂度是 $ T(n)=T({n\over2})+\mathcal O(n\log n)=\mathcal O(n\log n) $.

Bernoulli Number

求第 $ n $ 项 Bernoulli number.

Sol. Bernoulli number 的 egf 为 $ \hat{B}(x)={x\over e^x-1}=\sum B_i{x^i\over i!} $.

将 $ e^x $ 展开,

$$ \hat{B}={1\over \sum_{i=0}^ \infty{x_i\over (i+1)!}} $$

保留前 $ n $ 项即可。

Tsinsen A1493

$ n $ 点无向连通图计数。

Sol. 令 $ f_n $ 表示题目所求,容易写出式子

$$ \begin{align} f_n&=2^{n\choose2}-\sum_i {n-1\choose i-1}f_i2^{n-i\choose 2} \\ 2^{n\choose 2}&=\sum_i{n-i\choose i-1} f_i 2^{n-i\choose 2} \\ &=\sum_i {(n-1)!\over(i-1)!(n-i)!}f_i2^{n-i\choose2}\\ {2^{n\choose2}\over(n-1)!}&=\sum_i {f_i\over (i-1)!} {2^{n-i\choose i}\over (n-i)!} \end{align} $$

令 $ A(x)=\sum{2^{n\choose2}\over{(n-1)!}}x^n, B(x) = \sum {f_n\over(n-1)!}x^n, C(x) = \sum{ 2^{n \choose 2} \over n!} x^n $ ,则 $ A=BC $.

答案即为 $ [x^n]B=[x^n](AC^{-1}) $.

Division with Remainder of a Polynomial

多项式 $ (A\equiv BD+R)(x)\pmod{x^n} $ ,知 $ A,B $ 求 $ D,R $ .

我们考虑将多项式系数全部反过来,即高位到低位,低位到高位,记为 $ F^R $ .

为了研究于原来多项式的关系,我们需要将之表示回去,易发现 $ F^R(x) = x^{\deg F}F({1\over x}) $ .

那么我们有

$$ \begin{align} x^{\deg A}(A&= BD+R)({1\over x}) \\ A^R &= B^RD^R+x^{\deg A-\deg B+1}R^R \end{align} $$

注意到 $ \deg D^R < \deg A-\deg B+1 $ , 所以我们可以整个式模掉这么多次幂,求出 $ D^R=A^R(B^R)^{-1} $ ,反代回原式求出 $ D,R $ 即可。

多点求值

给 $ F $ , 求在 $ A=\{a_i\}_{i=0}^m $ 处的值。

Sol. 构造

$$ M_0(x)=\prod_{i=0}^{\lfloor{m\over2}\rfloor} (x-a_i) \\ M_1(x)=\prod_{i=\lfloor{m\over2}\rfloor}(x-a_i) $$

$$ Q_0 = F \mod {M_0} \\ Q_1=F\mod {M_1} $$

因为 $ M_k $ 已经包含了 $ x-a_i $ ,所以商式必然为零,显然有 $ F(a_i)=Q_0(a_i),0\le i\le \lfloor{m\over2}\rfloor; F(a_i)=Q_1(a_i),\lfloor{m\over2}\rfloor<i\le m $.

分治。总的复杂度为 $ \mathcal O(n \log^2 n) $.

常系数线性递推

(坑)

多项式 Euclid 算法

给 $ A,B $ 求最大公因式。

Sol. Euclid 算法仍然可以用到多项式环上。每次只能最高次数降低 $ 1 $ ,总的复杂度为 $ O(n^2\log n) $.

多项式模多项式

给 $ A,M $ 求 $ A^{-1}:AA^{-1}\equiv1\pmod M $.

Sol. 拓展 Euclid 自然成立。$ AP+MQ=\gcd(A,M)=1 $.

Square Root of a Polynomial

求 $ A_n:A_n^2\equiv A\pmod {x^n} $.

变形得

$$ \begin{align} (A_n^2-A)^2&\equiv0&\pmod {x^{2n}} \\ (A_n^2+A)^2&\equiv 4A_n^2A &\pmod {x^{2n}}\\ ({A_n^2+A\over2A_n})^2&\equiv A &\pmod {x^{2n}}\\ {A_n^2+A\over2A_n}&\equiv A_{2n} &\pmod {x^{2n}} \end{align} $$

复杂度同上分析为 $ \mathcal O(n\log n) $.

CF 250E

(坑)

Newton's Method of Polynomial

给 $ G $ 求 $ F:G(F(x))\equiv0\pmod {x^n} $.

仍然考虑倍增,我们设 $ G(F_t(x))\equiv0\pmod {x^{2^t}} $.

首先常数项必为 $ 0 $ 方可收敛。我们考虑模 $ x^{2^{t+1}} $ 意义,对 $ G\circ F_{t+1} $ 在 $ F_t $ 上展开,有

$$ G\circ F_{t+1}=G\circ F_t+\sum_{i>0}{G^{(i)}\circ F_t\over i!}(F_{t+1}-F_t)^i $$

注意到 $ \deg ((F_{t+1}-F_t)^2) \ge 2^{t+1} $ ,那么从第三项开始往后都为零,即有

$$ \begin{align} G\circ F_{t+1}&\equiv G\circ F_t+G'\circ F_t\times(F_{t+1}-F_t)&\pmod {x^{2^{t+1}}} \\ F_{t+1}&\equiv F_t-{G\circ F_t \over G'\circ F_t} &\pmod {x^{2^{t+1}}} \end{align} $$

多项式迭代目前没有高效算法……但结合特殊形式我们可以有很多用处。

求逆

求 $ FP\equiv 1\pmod{x^n} $.

用上式即得 $ F_{t+1} \equiv F_t-{F_tP-1\over P} \equiv F_t-F_t(F_tP-1) \pmod {x^{2^{t+1}}} $.

开方

求 $ F^2-P\equiv1\pmod {x^n} $.

用上式即得 $ F_{t+1}\equiv F_t-{F_t^2P\over 2F_t} \pmod {x^{2^{t+1}}} $.

常数项如果不是零需要用到二次剩余。

求 exp

求 $ e^P-F\equiv0\pmod {x^n} $. 变形有 $ \ln F-P\equiv0\pmod{x^n} $.

用上式即得 $ F_{t+1}\equiv F_t-(\ln F_t-P)F_t \pmod {x^{2^{t+1}}} $.

注意到 $ \ln F=\int {F'\over F} \mathrm{d}x $.

求三角函数值

求 $ \cos P-X\equiv 0 \pmod {x^n} \\ \sin P - X \equiv 0 \pmod {x^n} $.

由 Euler's Formula 有 $ e^{iF}=\cos F+i\sin F $.

直接用复数,或者模意义下用二元组代替复数。

求幂

求 $ F-P^k\equiv 0\pmod {x^n} $.

易有 $ \ln F-k\ln P\equiv0 \pmod {x^n} $.

容易发现这个方法也可以用来开方,但规避了求 $ k $ 次剩余。

Solving Differential Equation of Polynomial

已知 $ F $ , 求 $ A : {\mathrm d \over \mathrm dx} A=F(A) $ .

还是得用牛顿迭代……之所以新开一节一个是背景知识需求大了一个是式子推起来复杂了。

考虑倍增,对 $ F(A_{2n}) $ 在 $ F(A_n) $ 处展开

$$ {\mathrm d \over \mathrm dx} A_{2n} \equiv F(A_n)+F'(A_n)A_{2n}-F'(A_n)A_n \pmod {x^{2n}} $$

移项,且令 $ r:=\exp(-\int F'(A_n)\mathrm dx) $ , 两边乘 $ r $ .

$$ {\mathrm d \over \mathrm dx}A_{2n}r=r(F(A_n)-F'(A_n)A_n) $$

右式积分后除以 $ r $ 即得答案。复杂度还tm是 $ \mathcal O(n\log n) $ .

关于上式中出现的 $ r $ ,其实我们要这样考虑……

我们希望构造出来一个东西,使得上面最后那个式子成立,这样可以方便计算……

于是我们待定系数 $ r $ ,使用之前的信息可以解出它。式子化简后是

$$ {\mathrm d \over \mathrm dx} r=-rF'(A_n) $$

这是一个一阶线性其次微分方程,我们考察更一般的情况:$ {\mathrm dy\over \mathrm dx} +P(x)y=0 $ .

分离系数后的过程是机械的:

$$ \begin{align} {\mathrm dy \over y}&=-P(x)\mathrm dx \\ \ln |y|&=-\int P(x)\mathrm dx+C_1 \\ y&=Ce^{-\int P(X)\mathrm dx} \end{align} $$

其中 $ C = e^{C_1} $ .

对任意的 $ C $ 都可以的话,我们选最简单的 $ C=1 $ 即得上式。

Number Theory Transform Modulo Prime

模任意素数 FFT,只需在选取三个好的质数,分别计算,然后 CRT 合并即可。

这里有一份好的素数表。

Real Optimal

http://blog.miskcoo.com/2018/01/real-dft

使用复部的信息减少一次 FFT.

(坑)

标签: mathematics

添加新评论