多项式&生成函数

Posted fexuile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多项式&生成函数相关的知识,希望对你有一定的参考价值。

多项式和生成函数

多项式

鸽掉了多项式开根(加强版).

这里放一份多项式板子合集

多项式乘法

背个板子就好了.

FFT

泰勒展开与麦克劳林级数

(f(x))(x=x0)处存在(n)阶导,那么:
[ egin{align} f(x)&=f(x0)+frac{f^1(x0)}{1!}(x-x0)+frac{f^2(x0)}{2!}(x-x0)^2+...+frac{f^n(x0)}{n!}(x-x0)^n+xi&=sum_{i=0}^nfrac{f^i(x0)}{i!}(x-x0)^i+xi end{align} ]
(xi)是余项,当(n)无穷大时(xi)为高阶无穷小.

特殊情况是(x0=0)是的泰勒展开,称之为麦克劳林级数.

(f(x)=sum_{i=0}^nfrac{f^i(0)}{i!}x^i)

比较常见的是(e^x)的展开:(e^x=1+frac{x}{1!}+frac{x^2}{2!}+frac{x^3}{3!}+...)

牛顿迭代

一个很有用的东西.

我们知道任何一种多项式运算都可以变成一种运算(F(x))和一个多项式(B(x)),满足
[ F(B(x)) equiv 0( ext{mod} x^n) ]
例如 如果要求逆,那么(F(B(x))=A(x)*B(x)-1 equiv 0)

现在考虑当(n=1)的时候很好求是吧.

考虑用(n)扩展到(2n)的情况:令(B_{n}(x))表示满足(n)的解.

(F(B_{2n}(x)))(B_n(x))处泰勒展开,有:
[ F(B_{2n}(x))=F(B_n(x))+frac{F'(B(x))}{1!}(B_{2n}(x)-B_n(x))+... ]
此时我们发现后面的项都是没有用的,因为:

[ F(B_{2n}(x))equiv 0( ext{mod }x^{n}) ]
然后不难发现,(B_{2n}(x))的后(n)项和(B_n(x))没有区别,那么当变成((B_{2n}-B_n(x))^2)的时候就会把它全部覆盖,所以此时一定满足(F(B_{2n}(x)))的性质,也就是( ext{mod }x^nequiv 0).

这个时候我们把式子化成了:
[ B_{2n}(x)=B_n(x)-frac{F(B_n(x))}{F'(B_n(x))} ]
注意求导是对(B_n(x))求导.然后就可以递归求解了.

多项式求逆

(F(B_n(x))=A(x)*B_n(x)-1 equiv 0).

那么此时可以得到:

[ egin{align} B_{2n}(x)&=B_n(x)-frac{A(x)*B_n(x)-1}{A(x)}&=B_n(x)-(A(x)*B_n(x)-1)B_n(x)&=2B_n(x)-A(x)*B^2_n(x) end{align} ]

多项式开根

(F(B_n(x))=B_n^2(x)-A(x)equiv 0)

此时可以得到:
[ egin{align} B_{2n}(x)&=B_n(x)-frac{B_n^2(x)-A(x)}{2B_n(x)}&=frac{1}{2}(frac{B^2_n(x)+A(x)}{B_n(x)})&=frac{1}{2}(B_n(x)+frac{A(x)}{B_n(x)}) end{align} ]

需要用到多项式求逆.

多项式求导

((x^n)'=n*x_{n-1}),导数具有线性性,直接算即可.

多项式积分

(int x^n=frac{1}{n+1}x^{n+1}),同样满足线性性.

多项式ln

[ ln(A(x))=B(x)ln'(A(x))=B'(x)\\frac{A'(x)}{A(x)}=B'(x) ]

直接复合函数求导之后求导+乘法( o)积分即可.

多项式exp

看到这里应该没有人不知道(exp(x))(e^x)吧.
(F(B_n(x))=ln B_n(x)-A(x)equiv 0)
[ egin{align} B_{2n}(x)&=B_n(x)-frac{ln B_n(x)-A(x)}{frac{1}{B_n(x)}}&=B_n(x)-B_n(x)(ln B_n(x)-A(x))&=B_n(x)(1-ln B_n(x)+A(x)) end{align} ]
要套用多项式(ln)和多项式乘法.

多项式快速幂

[ B(x)=A^k(x)\\ln B(x)=kln A(x) ]

直接取(ln)然后每一个系数乘再做一个(exp)即可.

多项式除法

给定一个长度为(n)的多项式(A(x)),一个长度为(m)的多项式(B(x)),求一个长度为(n-m)的多项式(C(x))和一个长度小于(n-m)的多项式(R(x)).

首先我们定义一个运算(Reverse)(A^R(x)=x^nA(frac{1}{x})),其实就等于翻转(A)多项式的系数.

那么这个时候有:
[ A(x)=B(x)*C(x)+R(x)A(frac{1}{x})=B(frac{1}{x})*C(frac{1}{x})+R(frac{1}{x})x^nA(frac{1}{x})=x^mB(frac{1}{x})*x^{n-m}C(frac{1}{x})+x^nR(frac{1}{x})A^R(x)=B^R(x)*C^R(x)+R^R(x)*x^{n-m+1} ]
然后把这个式子在(mod x^{n-m+1}),就是:

[ A^R(x)=B^R(x)*C^R(x)C^R(x)=frac{A^R(x)}{B^R(x)} ]
直接套用多项式求逆即可.
(R(x)=A(x)-B(x)*C(x)),直接计算即可.

其他

zsy小哥哥博客

这里面还有一点小东西没有搞,以后再说鸽了

看完上面的你就可以去做多项式板子

但是那个开根要用二次剩余,他不保证(a[0]=1).

生成函数

普通型生成函数(( ext{OGF}))

考虑一个数列(A=<a_0,a_1,a_2,...>),他的( ext{OGF})(a_0+a_1x+a_2x^2+...)

例如斐波那契数列的( ext{OGF})就是(0+1x+1x^2+2x^3+...)

指数型生成函数(( ext{EGF}))

对于数列(a),他的( ext{EGF})(sum_{i=0}^{infty}frac{a_i}{i!}x^i)

(e^x)的就是数列(<1,1,1,1,...>)(EGF).

未完待续.

以上是关于多项式&生成函数的主要内容,如果未能解决你的问题,请参考以下文章

[复习]多项式和生成函数相关内容

生成函数入门

「总结」多项式生成函数相关

生成函数

luoguP5748 集合划分计数 指数型生成函数+多项式exp

生成函数