多项式算法 发表于 2023-02-21 更新于 2025-02-16 分类于 算法竞赛 多项式算法 多项式是组合计数题目中非常重要的工具。 约定 幂级数用大写字母表示,系数用对应的小写字母表示,对于 F(x),fi 就是 F(x)[xi]。 多项式乘法 应用 对于形如 fk=w(k)∑i+j=kaibj 的 fk,可以利用多项式乘法在 O(nlogn) 的时间里解决。 或者说,对于形如 F(x)=A(x)⋅(B(x)∗C(x)) 的幂级数 F(x) ,可以在 O(nlogn) 的时间里求出。 多项式求乘法逆 一般被描述对于一个 F(x) 找一个 H(x),满足 F(x)∗G(x)≡1(modxn)。 可以用定义法配合分治 FFT 在 O(nlog2n) 的时间内解决: (1)hn=−∑i∈[0,n)fihn−ixnfnxn 第二种方式是倍增法,假设我们已经求出了 H′(x) 满足 H′(x)∗F(x)≡1(modx⌈n2⌉)。又显然有 H(x)∗F(x)≡1(modx⌈n2⌉)。两式相减得 (H′(x)−H(x))∗F(x)≡0(modx⌈n2⌉)。平方得 (H′(x)−H(x))2∗F2(x)≡0(modxn)。 (2)(H′(x)−H(x))2∗F2(x)≡0(modxn)(3)H′2(x)F2(x)−2H′(x)H(x)F2(x)+H2(x)F2(x)≡0(modxn)(4)H′2(x)F(x)−2H′(x)+H(x)≡0(modxn)(5)H(x)≡−2H′(x)−H′2(x)F(x)(modxn) 其中第二行到第三行先同时除以 F(x) 再对 F(x) 和 H(x) 进行乘法得到 1。 对于 n=1 我们显然有 H′(x)=f0−1,然后依次推出即可。