多项式

乘法逆

题面

P4238 【模板】多项式乘法逆

给定一个多项式 \(F(x)\),请求出一个多项式 \(G(x)\), 满足 \(F(x) * G(x) \equiv 1 \pmod{x^n}\)

系数对 \(998244353\) 取模。

为方便 NTT 和倍增,不妨设 \(n\)\(2\) 的幂。

我们有两种方法。

倍增

首先,若 \(n=1\),答案为 \([x^0]F(x)\) 的乘法逆元。

假设我们求出了 \(\bmod x^{n/2}\) 的逆,设为 \(H(x)\)

接下来就是柿子环节

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

我们就得到了递推式。

牛迭

Konata:多项式牛顿迭代法,不止用来求逆用的。

Konata:求逆的话就是在上面证明基础上直接用就好了。

代码 / 时间复杂度

注意多项式项数 / 边界等细节,可看注释。

record

时间:

\[T(n)=T(\frac{n}{2})+n\log n \]

主定理,时间复杂度为 \(O(n\log n)\)

乘转加

例题

P3321 [SDOI2015]序列统计

题面够简化了,不需要再补充了。

做法

如果将「数列中所有数的乘积」改成「加和」那就好做了,将 \(S\) 中的元素移到 \(x\) 的指数上去然后多项式快速幂即可。

但是这里是「乘积」,咋办?

首先,因为题目要求最后的结果(题面中的 \(x\))不是 \(0\),所以我们可以把 \(S\) 中的 \(0\) 全部删去。

其次,由于 \(m\) 是素数,这篇说到只有 \(1,2,4,p^k,2p^k\)\(p\) 为奇素数)有原根。

\(\bmod p(p\in\text{prime})\) 意义下的乘法可以转化为 \(\bmod (p-1)\) 意义下的加法,转化途径就是原根。

也就是说,我们本来的思路是 \(\log(xy)=\log(x)+\log(y)\) 用对数转化的,但是我们只支持自然数啊。所以我们打算「以原根为底求 \(\log\)」设我们求出 \(m\) 的原根有 \(g\),我们把 \(1,\dots,m-1\) 都表示为

\[g^{k}\bmod m\quad(k\in[0,\varphi(m)-1(=m-2)]\cap\mathbb{N}) \]

的形式,这时她的对数就是这里的指数 \(k\)

所以我们把这个对数放到 \(x\) 的指数上去,然后多项式快速幂即可,注意我们每次将多项式压进 \(x\) 指数 \(\bmod (m-1)\) 的同余系里。

record

导数积分

\[\frac{d\, x^n}{d\, x}=nx^{n-1} \]

\[\int x^n d\, x=\frac{x^{n+1}}{n+1} \]

ln & exp

\[\begin{aligned} G&=\exp F \\ G'&=F'\exp F \\ G'&=F'G\quad ^{\dagger} \\ F&=\int\frac{G'}{G} \\ \ln G&=\int\frac{G'}{G} \end{aligned} \]

\(\ln G\) 有意义 \(\iff [x^0]G=1\)

\(\exp F\) 有意义 \(\iff [x^0]F=0\)

用多项式乘法逆即可线性对数求出多项式 \(\ln\)

更好写的 \(O(n^2)\) 多项式 \(\exp\) 求法:

\(f_i=[x^i]F,g_i=[x^i]G\),由 \(\dagger\) 式得:

\[(i+1)g_{i+1}=\sum_{j=0}^i(i-j+1)f_{i-j+1}g_j\quad(i\ge 0,g_0=1) \]

将上式移项有 \(O(n^2)\) 多项式 \(\ln\) 求法:

\[(i+1)g_0f_{i+1}=(i+1)g_{i+1}-\sum_{j=1}^ijg_{i+1-j}f_j\quad(i\ge 0,f_0=0) \]

posted @ 2022-07-05 19:56  ShaoJia  阅读(160)  评论(0)    收藏  举报