多项式
不太规范
下文中 \(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\) 了