码迷,mamicode.com
首页 > 其他好文 > 详细

多项式&生成函数

时间:2020-02-09 23:30:46      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:ble   直接   存在   ubuntu   lin   fft   int   注意   tps   

多项式和生成函数

多项式

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

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

多项式乘法

背个板子就好了.

FFT

泰勒展开与麦克劳林级数

\(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)\),直接计算即可.

其他

zsy小哥哥博客

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

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

但是那个开根要用二次剩余,他不保证\(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\).

未完待续.

多项式&生成函数

标签:ble   直接   存在   ubuntu   lin   fft   int   注意   tps   

原文地址:https://www.cnblogs.com/fexuile/p/12289196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!