多项式和生成函数
多项式
鸽掉了多项式开根(加强版).
多项式乘法
背个板子就好了.
泰勒展开与麦克劳林级数
若\(f(x)\)在\(x=x0\)处存在\(n\)阶导,那么:
\[
\begin{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}^n\frac{f^i(x0)}{i!}(x-x0)^i+\xi
\end{align}
\]
\(\xi\)是余项,当\(n\)无穷大时\(\xi\)为高阶无穷小.
特殊情况是\(x0=0\)是的泰勒展开,称之为麦克劳林级数.
\(f(x)=\sum_{i=0}^n\frac{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(\text{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(\text{mod }x^{n})
\]
然后不难发现,\(B_{2n}(x)\)的后\(n\)项和\(B_n(x)\)没有区别,那么当变成\((B_{2n}-B_n(x))^2\)的时候就会把它全部覆盖,所以此时一定满足\(F(B_{2n}(x))\)的性质,也就是\(\text{mod }x^n\equiv 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\).
那么此时可以得到:
\[
\begin{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\)
此时可以得到:
\[
\begin{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)
\]
直接复合函数求导之后求导+乘法\(\to\)积分即可.
多项式exp
看到这里应该没有人不知道\(exp(x)\)是\(e^x\)吧.
\(F(B_n(x))=\ln B_n(x)-A(x)\equiv 0\)
\[
\begin{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)=k\ln 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\).
生成函数
普通型生成函数(\(\text{OGF}\))
考虑一个数列\(A=<a_0,a_1,a_2,...>\),他的\(\text{OGF}\)是\(a_0+a_1x+a_2x^2+...\)
例如斐波那契数列的\(\text{OGF}\)就是\(0+1x+1x^2+2x^3+...\)
指数型生成函数(\(\text{EGF}\))
对于数列\(a\),他的\(\text{EGF}\)是\(\sum_{i=0}^{\infty}\frac{a_i}{i!}x^i\)
\(e^x\)的就是数列\(<1,1,1,1,...>\)的\(EGF\).
未完待续.
原文地址:https://www.cnblogs.com/fexuile/p/12289196.html