生成函数
用函数(多项式代数)表示各种数列
- 相比于直接操作函数,多项式之间的运算更容易,因此我们往往先把一个数列的生成函数写出来,然后分析数列需要的操作通过函数的操作来表示,而这个操作运用多项式的运算来完成更会好。
- 各个操作之间的对应,令函数F(x)是数列<a0,a1,a2,⋯,an>的生成函数
- cF(x)→<ca0,ca1,ca2,⋯,can>:数列倍增
- xF(x)→<0,a0,a1,a2,⋯,an>:数列右移,左边补0
- F(x)−a0x→<a1,a2,⋯,an>:数列左移
- F1(x)−F2(x)→<a1,0−a2,0,a1,1−a2,1,a1,2−a2,2,⋯,a1,n−a2,n>:数列对应项加减
- F′(x)→<a1,2a2,3a3,⋯,nan>:数列乘幂次+左移
- F1(x)⋅F2(x)=∑k=0,i≤ka1,ia2,k−ixk→数列卷积
卷积的应用
- 记数列<a0,a1,a2,⋯,an⋯>的生成函数为F(x)
- 求数列前n项和:[xn]F(x)1−x
- 求自然数平方和
11−x↔<1,1,1,⋯,1,⋯>1(1−x)2↔<1,2,3,⋯,n,⋯>1(1−x)3↔<1,3,6,10,⋯,n(n+1)2,⋯>x(1−x)3↔<0,1,3,6,10,⋯,n(n+1)2,⋯>1+x(1−x)3↔<1,4,9,16,25,⋯>(xn)x(1+x)(1−x)4=n∑i=1i2(1−x)−4=∑n≥0(n+33)xnn∑i=1i2=(n+23)+(n+13)
指数生成函数
F(x)=a0+a1x+a2x22!+a3x33!+⋯=ex
现在看一下两个指数生成函数的卷积F⋅G,设F对应的数列是<a>,G对应的数列是<b>。现在考虑我们要求卷积完后第4项的系数
c4=a0b40!4!+a1b31!3!+a2b22!2!+a4b04!0!
我们希望最后还是一个指数生成函数的形式,所以考虑给x4乘上一个14!,那么c4就要乘上一个4!
4!c4=4!0!4!a0b4+4!1!3!a1b3+4!2!2!a2b2+4!3!1!a3b1+4!4!0!a4b0=(40)a0b4+(41)a1b3+(42)a2b2+(43)a3b1+(44)a4b0
因此
fg={∞∑r=0arxrr!}{∞∑s=0bsxss!}=∑r,s≥0arbsr!s!xr+s=∑n≥0xn{∑r+s=narbsr!s!}[xnn!](fg)∑r+s=nn!arbsr!s!=∑r(nr)arbn−r
扩展到更多项
fm=∑n≥0∑∑mi=1pi=n∏∑mi=1pi=napi∏∑mi=1pi=npi!xn[xnn!]fm=∑p1+p2+⋯+pm=nn!p1!p2!⋯pm!ap1ap2⋯apm=∑p1+p2+⋯+pm=n(np1,p2,⋯,pm)ap1ap2⋯apm
Dirichlet生成函数
F(x)=a1+a22s+a33s+a44s+⋯
现在看一下两个Dirichlet生成函数的卷积F⋅G,设F对应的数列是<a>,G对应的数列是<b>。
设cn是卷积后的第n项,则
cn=∑i×j=naibj=∑d|nadbnd
应用
ζ(s)=1+12s+13s+⋯(ai=1)
- ζ(s)2的第n项的系数表示d(n),即n的约数的个数
- 1ζ(s)的第n项的系数表示μ(n)
- 若A(s)=B(s)ζ(s),则B(s)=A(s)ζ(s),得到bn=∑d|nadμ(nd)
参考链接
jyyyyds,特别形象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】