多项式

多项式

不太规范

下文中 \(F(x)\) 均表示一个已知的多项式

\([x^i]F(x)\) 表示 \(F(x)\)\(x^i\) 的系数

\(n\) 表示多项式 \(F(x)\) 的长度,如果有长度不同且未知的,用 \(|G(x)|\) 表示 \(G(x)\) 的阶数

默认使用 \(NTT\),模数为质数 \(p\)

板子

乘法

就是 \(\operatorname{FFT}\)\(\operatorname{NTT}\)

求逆

只能在模意义下求,设

\[G(x)\equiv \frac{1}{F(x)}\pmod {x^n} \]

直接求不是很能做,考虑倍增

\[H(x)\equiv \frac{1}{F(x)} \pmod {x^{\frac n2}} \]

移项得到

\[F(x)(G(x)-H(x))\equiv 0\pmod {x^{\frac n2}} \]

两边同乘 \(H(x)\)

\[G(x)-H(x)\equiv0\pmod {x^{\frac n2}} \]

平方可以将模数也平方

\[G^2(x)+H^2(x)-2G(x)H(x)\equiv0\pmod {x^n} \]

两边同乘 \(F(x)\) 以消去平方项

\[G(x)\equiv 2H(x)-F(x)H^2(x)\pmod {x^n} \]

\(G(x)\) 转化为求 \(H(x)\),倍增即可

复杂度

\[\begin{aligned} T(n)&=T(\frac n2)+O(n\log n)\\ T(n)&=O(n\log n) \end{aligned} \]

求导&积分

直接对每一项求即可,就是

\[\sum a_ix^i\leftrightarrow \sum ia_{i}x^{i-1} \]

从右到左是积分,反过去是求导

注意积分不能得到常数项,最好是取 \(x=0\) 解一下常数项,但如果不能这样做就只有取一个合法的 \(x\) \(O(n)\) 求常数项了。(不过一般的题目对于常数项会有特殊约束,比如一定是 \(0\) 之类的)

开根

\(G^2(x)=F(x)\pmod {x^n}\)

先看 \([x^0]F(x)\) 是不是 \(1\),如果是 \(0\) 显然可以约掉最末几项,否则就判断是不是二次剩余,最后乘回来就可以了

现在,我们得到 \([x^0]F(x)=1\),还是考虑倍增

\[\begin{aligned} G^2(x)&\equiv F(x)\pmod {x^n}\\ H^2(x)&\equiv F(x)\pmod {x^{\frac n2}} \end{aligned} \]

与求逆一样的做法

\[\begin{aligned} (H^2(x)-F(x))^2&\equiv 0\pmod {x^n}\\ (H^2(x)+F(x))^2&\equiv 4H^2(x)F(x)\pmod {x^n}\\ (\frac{H^2(x)+F(x)}{2H(x)})^2&\equiv F(x)\pmod {x^n}\\ &\equiv G^2(x)\pmod {x^n} \end{aligned} \]

于是显然有

\[G(x)\equiv \frac{H^2(x)+F(x)}{2H(x)}\pmod {x^n} \]

牛顿迭代

\(F(G(x))\equiv 0\pmod {x^n}\)

首先需要知道 泰勒展开

仍然考虑倍增,设

\[\begin{aligned} F(G(x))&\equiv 0\pmod {x^n}\\ F(H(X))&\equiv 0\pmod {x^{\frac n2}} \end{aligned} \]

我们知道

\[F(x)\equiv F(y)\pmod {(x-y)} \]

于是

\[\begin{aligned} F(G(x))&\equiv F(H(x))\pmod {(G(x)-H(x))}\\ F(G(x))&\equiv F(H(x))\equiv 0\pmod {x^{\frac n2}} \end{aligned} \]

因为 \(|H(x)|=\frac n2\),所以

\[G(x)-H(x)\equiv 0\pmod {x^{\frac n2}} \]

考虑把 \(F(G(x))\)\(F(H(x))\) 处泰勒展开

\[F(G(x))=\sum_{i=0}^{+\infty}F^{(i)}(H(x))\frac{(G(x)-H(x))^i}{i!} \]

注意到

\[(G(x)-H(x))^2\equiv 0\pmod {x^n} \]

于是只需要取泰勒展开的前两项

\[F(G(x))\equiv F(H(x))+F^\prime(H(x))(G(x)-H(x))\pmod {x^n} \]

因为

\[F(G(x))\equiv0\pmod {x^n} \]

所以

\[G(x)\equiv -\frac{F(H(x))}{F^\prime(H(x))}+H(x)\pmod {x^n} \]

首先,对于 \(n=1\) 的情况,需要求出 \(F(G_0(x))\)\(G_0(x)\)

这是容易求得的,之后反过来倍增就可以了

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

反函数

\(F^{-1}(F(x))\equiv1\pmod {x^n}\)

用反函数求导法则

\[(F^{-1}(x))^\prime F^\prime(x)\equiv 1\pmod {x^{n-1}} \]

求逆即可,最后积分回来,常数项是逆元

ln&exp

\(\ln F(x)\)

还是在模意义下的

\[G(x)\equiv \ln F(x)\pmod {x^n} \]

两边同时求导得

\[G^\prime(x)\equiv \frac{F^\prime(x)}{F(x)}\pmod {x^{n-1}} \]

显然可以求出,然后积回来,常数项一般不用管,要看一下的话就用麦克劳林公式判一下 \(x=0\) 的情况

\(e^{F(x)}\)

依然是倍增,假设 \(G_0(x)\)\(\bmod x^{\frac n2}\) 时的答案,\(n=1\) 的情形显然容易求出,就是 \(0\)

\[G(x)\equiv e^{F(x)}\pmod {x^n} \]

考虑变换为关于 \(G(x)\) 的函数

\[\begin{aligned} H(A(x))&=\ln A(x)-F(x)\\ H(G(x))&\equiv 0\pmod {x^n} \end{aligned} \]

因为 \(H(A(x))\) 是关于 \(A(x)\) 的函数,而 \(F(x)\)\(A(x)\) 无关,所有求导的时候 \(F(x)\) 是常数

然后套用牛顿迭代的公式就有

\[G(x)=\frac{G_0(x)(1-\ln G_0(x)+F(x))}{G_0^\prime(x)} \]

没有操作的复杂度超过乘法,还是 \(O(n\log n)\)

快速幂

\(F^k(x)\)

\[G(x)=F^k(x)=e^{k\ln F(x)} \]

然后就做完了,不过需要保证 \([x^0]F(x)=1\) 这个容易转化

不过有一个很重要的细节,\(k\) 不应该对于 \(\varphi(p)\) 取模,而是关于 \(p\) 取模

可以规约为

\[F^p(x)\equiv F(x^p)\pmod p \]

然后数归就可以了

Trick

Bostan-Mori

\([x^n]\frac{F(x)}{G(x)}\)

首先,对于任意 \(F(x)\)

存在

\[H(x^2)=F(x)F(-x) \]

\[F(x)=\sum a_ix^i \]

\[\begin{aligned} F(x)F(-x)&=(\sum a_ix^i)(\sum (-1)^ia_ix^i)\\ &=\sum_k(\sum_{i}a_ia_{k-i}(-1)^i)x^k \end{aligned} \]

如果 \(k\) 是奇数,那么容易说明

\[\sum_{i}a_ia_{k-i}(-1)^i=0 \]

要求 \([x^n]\frac{F(x)}{G(x)}\),就是求 \([x^n]\frac{F(x)G(-x)}{G(x)G(-x)}\)

把分子按奇偶拆开,得到

\[\frac{F(x)G(-x)}{G(x)G(-x)}=\frac{P(x^2)+xQ(x^2)}{H(x^2)} \]

\(n\) 的奇偶判断取 \(P\)\(Q\)

复杂度显然也是 \(O(n\log n)\)

可以用来优化数列递推

如果递推式形如

\[x_{n}=\sum_{i=1}^ma_{i}x_{n-i} \]

那么用矩阵快速幂容易做到 \(O(m^3\log n)\)

但可以求其生成函数

\[F(x)x^m=\sum_{i=1}^ma_{i}x^{m-i}F(x) \]

然后发现,一定是如下形式

\[F(x)=\frac{1}{1-A(x)} \]

套用之前的做法就可以 \(O(m\log m\log n)\)\(x_n\)

posted @ 2022-06-18 10:47  嘉年华_efX  阅读(118)  评论(0)    收藏  举报