多项式&生成函数
Posted fexuile
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多项式&生成函数相关的知识,希望对你有一定的参考价值。
多项式和生成函数
多项式
鸽掉了多项式开根(加强版).
多项式乘法
背个板子就好了.
泰勒展开与麦克劳林级数
若(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)),直接计算即可.
其他
这里面还有一点小东西没有搞,以后再说鸽了
看完上面的你就可以去做多项式板子了
但是那个开根要用二次剩余,他不保证(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).
未完待续.
以上是关于多项式&生成函数的主要内容,如果未能解决你的问题,请参考以下文章