多项式

1.多项式

1.1定义

对于代数式$F(x)$,可以表示成$F(x)=\sum_{i=0}^{+\infty}f_i*x^i$则称为多项式。

1.2多项式加/减法

$(A+B)(x)=\sum_{i=0}a_i*x^i+\sum_{i=0}b_i*x^i=\sum_{i=0}(a_i+b_i)*x^i$

$(A-B)(x)=\sum_{i=0}a_i*x^i-\sum_{i=0}b_i*x^i=\sum_{i=0}(a_i-b_i)*x^i$

复杂度$O(n)$。

1.3多项式的表示方法

1.3.1系数表示方法 

形如$\sum_{i=0}^{n} ai x^{i}$的代数式 

1.3.2点值表示方法

对于$k$次多项式,给出在$k+1$个地方的取值,可以唯一确定多项式 

证明:考虑这$k+1$个点值相同的一个$k$阶多项式,两个$k$阶多项式相减,得到$k+1$个零点的一个多项式,利用代数基本定理,该多项式为$0$,$k+1$个点值相同的$k$阶多项式是唯一的.

1.3.3点值表示下多项式的运算

多项式加减$O(n)$对应位置点值加减即可

多项式乘法$O(n)$对应位置点值相乘即可 

2.多项式乘法

2.1定义

定义$A*B$表示多项式$A$与多项式$B$的乘积,满足$(A*B)(x)=\sum_{i=0}x^i\sum_{j=0}^{i}a_j*b_{i-j}$。

2.2多项式系数点值转化 

2.2.1复数

记$i^2=-1$,复数形如$a+bi$

2.2.2复数运算

加法:$(a+bi)+(c+di)=(a+c)+(bi+di)$ 

减法:$(a+bi)-(c+di)=(a-c)+(bi-di)$

乘法:$(a+bi)(c+di)=(ac-bd)+(ad+bc)i$ 

2.2.3单位根
复平面中,记$w_n$是幅角最小的$n$次单位根 

显然$w_n^{k}$也是$n$次单位根

代数基本定理$x^{n}=1$的解一共有$n$个,所以得到了所有的$n$次单位根 

这$n$个$n$次单位根,以原点为圆心,$1$为半径作圆,所得单位圆的$n$个等分点

易知 $w_{n}^{k}=\cos(\frac{k*2\pi}{n})+i \sin(\frac{k*2\pi}{n})$

性质1:$w_{2n}^{2k}=w_{n}^{k}$

性质2:$w_{n}^{k+\frac{n}{2}}=-w_{n}^{k}$

2.3快速傅里叶变换(fft)

2.3.1快速傅里叶变换fft

考虑多项式A(x)的点值表示,我们尝试求$A(w_n^0),A(w_n^1),A(w_n^2),...,A(w_n^{n-1})$

设$A(x)=\sum_{i=0}^{n-1}aix^i$

下标奇偶分类,写成

$A(x)=\sum_{i=0}^{2k}a_ix^i+x\sum_{i=0}^{2k}a_{i+1}x^i$

$A1(x)=\sum_{i=0}^{k}a_{2i}x^i$ $A2(x)=\sum_{i=0}^{k}a_{2i+1}x^i$

则$A(x)=A1(x^2)+xA2(x^2)$

设$k<\frac{n}{2}$ 现在要求$A(w_n^k)$

$A(w_n^k)=A1(w_n^{2k})+w_n^{k}$,$A2(w_n^{2k})=A1(w_{\frac{n}{2}}^{k})+w_n^{k} A2(w_{\frac{n}{2}}^{k})$ 

$A(w_n^{k+\frac{n}{2}})=A1(w_n^{2k+n})+w_n^{k+\frac{n}{2}} A2(w_n^{2k+n})=A1(w_{\frac{n}{2}}^{k})-w_n^{k} A2(w_{\frac{n}{2}}^{k})$ 

只要知道$A1(x)$,$A2(x)$在$w_{\frac{n}{2}}^0$ $w_{\frac{n}{2}}^1 ... w_{\frac{n}{2}}^{\frac{n}{2}-1}$处点值,可$O(n)$推出$A(x)$在$w_n^0...w_n^{n-1}$处点值。

不难发现$A1(x)$,$A2(x)$是递归子问题,递归计算即可。

$T(n)=2T(n/2)+O(n)$,$T(n)=O(n \log n)$

2.3.2傅里叶逆变换idft

我们要把点值表示转化成系数表示 

设$A(x)=\sum_{i=0}^{n-1}aix^i$ 且$yi=A(w_n^i)$ 现在已知$y0,...,y_{n-1}$,想反推$a0,...,a_{n-1}$

 设$c_k=\sum_{i=0}^{n-1}yi(w_n^{-k})^i$ 即多项式$B(x)=\sum_{i=0}^{n-1}y_ix^i$在$w_n^0,w_n^{-1},...,w_n^{-k}$处的点值表示

展开上式可知

$c_k=\sum_{i=0}^{n-1}yi(w_n^{-k})^i\\=\sum_{i=0}^{n-1}(\sum_{j=0}^{n-1}aj(w_n^i)^j)(w_n^{-k})^i\\=\sum_{i=0}^{n-1}(\sum_{j=0}^{n-1}aj(w_n^j)^i)(w_n^{-k})^i\\=\sum_{i=0}^{n-1} \sum_{j=0}^{n-1}aj(w_n^{j-k})^i\\=\sum_{j=0}^{n-1}aj(\sum_{i=0}^{n-1}(w_n^{j-k})^i)$

记$S(w_n^k)=\sum_{i=0}^{n-1}(w_n^k)^i$

当$k\neq0$两边同乘$w_n^k$,$w_n^k S(w_n^k)=\sum_{i=1}^{n}(w_n^k)^i$

所以$S(w_n^k)=\frac{(w_n^k)^n-1}{w_n^k-1}=0$ 即当$k\neq0$,$S(w_n^k)=0$,否则$S(w_n^k)=n$

再看上式$c_k=\sum_{j=0}^{n-1}S(w_n^{j-k})=n*a_k$

故用单位根的倒数替代单位根做dft,再把每个数$/n$,即为逆变换结果.

2.3.3本质

向量左乘傅里叶矩阵和傅里叶逆矩阵,傅里叶矩阵和傅里叶逆矩阵有特殊性质.

复杂度$O(n \log n)$。

2.3快速数论变换(ntt)

注意到在fft中用到复数域上单位根的性质

如果在取模意义下,可以使用模意义下单位根(设$G$是原根,则$w_n$为$G^{\frac{p-1}{n}}$)

复杂度$O(n \log n)$。

2.4拆系数fft(mtt) 

复杂度$O(n \log n)$。

2.5循环卷积

定义$(A*B)_m$为$(A*B)_m(x)=\sum_{i=0}x^{i\bmod m}\sum_{j=0}^{i}a_j*b_{i-j}$。

2.6Bluestein's Algorithm

考虑如何解决快速计算$m\neq 2^k$的多项式$(A*B)_m$。

FFT的本质是通过分治快速计算点值,Bluestein类似。

考虑快速计算$f(w_m^k)$,即dft的过程。

发现$f(w_m^k)=\sum_{i=0}^{n}f_i*w_m^{ik}=\sum_{i=0}^{n}f_i*w_m^{(_2^{i+k})-(_2^i)-(_2^k)}=w_m^{-(_2^k)}\sum_{i=0}^{n}f_i*w_m^{-(_2^i)}*w_m^{(_2^{i+k})}$

利用技巧翻转一下,可以直接ntt处理了。

反之,idft有类似的式子,可以ntt解决。

复杂度$O(n \log n)$。

3.其他的多项式基本运算

3.1多项式求导

$(x^i)\prime=ix^{i-1}$,$F\prime(x)=\sum_{i=0}^{n-1}(i+1)f_{i+1}x^i$

复杂度$O(n)$。

3.2多项式积分

$\int(x^i)=\frac{x^{i+1}}{i+1}$,$\int F(x)=\sum_{i=1}^{n+1}\frac{f_{i-1}x^{i}}{i}$

复杂度$O(n)$。

3.3多项式求逆

考虑如果已知$\bmod x^n$的解如何推出$\bmod x^{2n}$的解:

假设$\bmod x^n$的解为$G'$,$\bmod x^{2n}$的解为$G$

显然$G'-G=0(\bmod x^n)$,

$(G'-G)^2=0(\bmod x^{2n})$,

$G'^2+G^2-2G'G=0(\bmod x^{2n})$,

$AG'^2+AG^2-2AG'G=0(\bmod x^{2n})$,

$\because AG=1$,

$\therefore AG'^2+G-2G'=0(\bmod x^{2n})$,

$\therefore G=2G'-AG'^2(\bmod x^{2n})$.

复杂度$O(n \log n)$。

3.4多项式开方

考虑如果已知$\bmod x^n$的解如何推出$\bmod x^{2n}$的解:

假设$\bmod x^n$的解为$G'$,$\bmod x^{2n}$的解为$G$

$\because G'-G=0(\bmod x^n)$,

$\therefore (G'-G)^2=0\pmod x^{2n}$,

$\therefore G'^2+G^2-2G'G=0(\bmod x^{2n})$,

$\because G^2=A$,

$\therefore G'^2+A-2G'G=0(\bmod x^{2n})$,

$\therefore G=\frac{A+G'^2}{2G'}\pmod x^{2n}$.

复杂度$O(n \log n)$。

3.5多项式除法/取模

已知函数$F$和$G$,求$Q$和$R$,使得$F=QG+R$

考虑多项式取反:$F_R(x)=x^{Deg(F)}F(\frac{1}{x})$。

为了简便,设$n=Deg(F),m=Deg(G)$,那么可知$Deg(Q)=n-m,Deg(R)=m-1$。

$\because F(x)=G(x)Q(x)+R(x)$

$\therefore F(\frac{1}{x})=G(\frac{1}{x})Q(\frac{1}{x})+R(\frac{1}{x})$

$\therefore x^nF(\frac{1}{x})=x^nG(\frac{1}{x})Q(\frac{1}{x})+x^nR(\frac{1}{x})$

$\therefore x^nF(\frac{1}{x})=x^mG(\frac{1}{x})x^{n-m}Q(\frac{1}{x})+x^{n-m+1}*x^{m-1}R(\frac{1}{x})$

$\therefore F_R(x)=G_R(x)Q_R(x)+x^{n-m+1}*R_R(x)$

$\therefore F_R(x)=G_R(x)Q_R(x)\pmod{x^{n-m+1}}$

$\therefore Q_R(x)=F_R(x)G_R^{-1}(x)\pmod{x^{n-m+1}}$

多项式求逆即可。至于R,直接$R=F-QG$就可以求出。

复杂度$O(n\log n)$。

4.多项式牛顿迭代

以上的方法有一定的局限性,$A$与$G$的关系要求一定与$(G-G')^2$的展开式的某个组成部分相关从而化简,考虑当没有这种优美性质时的解决方案。 

4.1Taylor展开

泰勒展开,$F(x)=F(x_0)+F'(x_0)(x-x_0)+F''(x_0)(x-x_0)^2+\cdots$

4.2多项式牛顿迭代

已知$G$,求多项式$F$满足$G(F(x))=0$。

设已知$F_0$满足$G(F_0(x))\equiv 0\pmod{x^n}$,要求$G(F(x))\equiv 0\pmod{x^{2n}}$。

函数 $G$ 对 $F$ 进行泰勒展开,得:

$G(F)=G(F_0)+G'(F_0)(F-F_0)+G''(F_0)(F-F_0)^2+\cdots$ 

因为$F-F_0\equiv 0\pmod{x^n}$,因此$(F-F_0)^k\equiv 0\pmod{x^{2n}},k\geq 2$。

因此后面几项在$\bmod x^{2n}$意义下全部为$0$。

所以$G(F)=G(F_0)+G\prime(F_0)(F-F_0)$

所以$F(x)\equiv F_0(x)-\frac{G(F_0(x))}{G\prime(F_0(x))} \pmod {x^{2n}}$ 

复杂度$O(n \log n)$。

4.3多项式ln

定义:$\ln(1-x)=-\sum_{i=1}^{+\infty}\frac{x^i}{i}$

$\ln\prime(F(x))=\frac{F'(x)}{F(x)}$

$\ln(F(x))=\int \frac{F'(x)}{F(x)}$

复杂度$O(n \log n)$。

4.4多项式exp

定义:$e^x=\sum_{i=0}^{+\infty}\frac{x^i}{i!}$

已知多项式$F$,求$G=exp F$,$F$常数项为$0$

考虑多项式牛顿迭代,有$\ln G-F=0$

$G=G_0(1-\ln G_0+F)$

复杂度$O(n \log n)$。 

4.5多项式幂

$F^k=exp(\ln(F))^k=exp(k\ln(F))$

4.6多项式三角函数

Euler公式$e^{i\theta} = \cos \theta + i\sin \theta$

同理:$e^{i(-\theta)} = \cos(-\theta)+i\sin(-\theta) = \cos\theta -i\sin \theta$

将上面两个式子相加,有$e^{i\theta} + e^{-i\theta}=2\cos\theta$

故有$\cos\theta =\frac{e^{i\theta} + e^{-i\theta}}{2}$

同理$\sin\theta = \frac{e^{i\theta} - e^{-i\theta}}{2i}$

需要计算$\frac{\exp \left(iF(x)\right) - \exp \left(-iF(x)\right)}{2i}$,$\frac{\exp \left(iF(x)\right) + \exp \left(-iF(x)\right)}{2}$

考虑$i^2=-1$,$998244352$是模$998244353$意义下的二次剩余,

因此显然存在i,解得$i\equiv 86583718 \pmod {998244353}$。

4.7多项式反三角函数 

$\arcsin x = \int \frac{1}{\sqrt{1-x^2}}$

$\arctan x = \int \frac{1}{1+x^2}$

同理可得:

$\arcsin F = \int \frac{F\prime}{\sqrt{1-F^2}}$

$\arctan F = \int \frac{F\prime}{1+F^2}$​

5.多项式与分治思想的结合

5.1分治fft

复杂度$O(n \log^2 n)$。 

5.2cdq分治+fft

复杂度$O(n \log^2 n)$。 

5.3多项式多点求值

复杂度$O(n \log^2 n)$。

5.4拉格朗日插值

复杂度$O(n^2)$。

5.5多项式多点插值

复杂度$O(n \log^2 n)$。

6.关于线性递推

6.1BM算法

6.2常系数线性递推

7.拉格朗日反演

8.集合幂级数的卷积

8.1fwt

8.2fmt

9.斯特林数的快速求解

9.1第一类斯特林数行

复杂度$O(n \log n)$。

9.2第一类斯特林数列

复杂度$O(n \log n)$。

9.3第二类斯特林数行

复杂度$O(n \log n)$。

9.4第二类斯特林数列

复杂度$O(n \log n)$。

10.下降幂多项式

10.1普通多项式转下降幂多项式

10.2下降幂多项式转普通多项式

10.3下降幂多项式乘法

11.Amazing Land!

11.1快速阶乘计算

11.2组合数前缀和

11.3阶乘模大质数

 

posted @ 2019-06-14 00:03  alonefight  阅读(503)  评论(0编辑  收藏  举报