多项式算法

多项式算法

多项式是组合计数题目中非常重要的工具。

约定

幂级数用大写字母表示,系数用对应的小写字母表示,对于 F(x)fi 就是 F(x)[xi]

多项式乘法

应用

对于形如 fk=w(k)i+j=kaibjfk,可以利用多项式乘法在 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)fihnixnfnxn

第二种方式是倍增法,假设我们已经求出了 H(x) 满足 H(x)F(x)1(modxn2)。又显然有 H(x)F(x)1(modxn2)。两式相减得 (H(x)H(x))F(x)0(modxn2)。平方得 (H(x)H(x))2F2(x)0(modxn)(2)(H(x)H(x))2F2(x)0(modxn)(3)H2(x)F2(x)2H(x)H(x)F2(x)+H2(x)F2(x)0(modxn)(4)H2(x)F(x)2H(x)+H(x)0(modxn)(5)H(x)2H(x)H2(x)F(x)(modxn) 其中第二行到第三行先同时除以 F(x) 再对 F(x)H(x) 进行乘法得到 1

对于 n=1 我们显然有 H(x)=f01,然后依次推出即可。