引入
给出一个数列\(\{a_n\}\),定义数列\(\{a_n\}\)的普通生成函数(母函数)为:
\[G(x)=\sum\limits_{i=0}^{n}a_ix^i
\]
可以发现这里我们定义只基于数列\(\{a_n\}\),\(x\)取值对\(\{a_n\}\)没有影响,所以实质上\(x\)无意义
生成函数是解决排列组合问题的利器,同时也可以应用到线性齐次递推中
普通生成函数
有的读者可能会问:那这个函数有什么用呢?
我们先看一个问题:
给出两种物品,数量分别为\(4,3\),求选出\(4\)种进行组合(即\(\{1122\},\{1212\}\)算一种)有多少种不同的结果
可以一眼看出是一道背包板子题,但这里我们使用生成函数解决问题
我们定义选出\(i\)件第一种物品的方案数为\(a_i\),选出\(i\)件第二种物品的方案数为\(b_i\),显然有:
\[\{a_n\}=\{1,1,1,1,1\}\\
\{b_m\}=\{1,1,1,1\}
\]
那我们选出\(k\)种进行组合的方案显然就是:
\[\sum\limits_{i=0}^ka_ib_{k-i}
\]
发现是个卷积的形式,所以我们令\(\{a_n\}\)的生成函数为\(F(x)\),\(\{b_n\}\)的生成函数为\(G(x)\),显然有:
\[F(x)=1+x+x^2+x^3+x^4\\
G(x)=1+x+x^2+x^3
\]
我们将\(F(x)\)和\(G(x)\)乘起来:
\[\begin{equation}
\begin{aligned}
F(x)\times G(x)
&=1+2x+3x^2+4x^3+4x^4+3x^5+2x^6+x^7
\end{aligned}
\end{equation}
\]
本题中\(k=4\),所以我们看到\(x^4\)项的系数\(4\)就是答案
枚举来看:
\[\{1,1,1,1\}\\
\{1,1,1,2\}\\
\{1,1,2,2\}\\
\{1,2,2,2\}
\]
答案也是\(4\)
如果物品不止两种呢?
有三种物品,分别有\(3,2,3\)个,问拿出\(4\)个进行组合(\(\{1123\},\{3211\}\)算一种)的方案数是多少
可以发现我们照样可以将三个数列的生成函数卷起来,取\(x^4\)系数即可
指数生成函数
(HDU1521)有三种物品,分别有\(3,2,3\)个,问拿出4个进行排列(\(\{1,1,2,3\},\{3,2,1,1\}\)算不同方案)的方案数是多少
我们给出多重集排列数的概念:
对于数列\(\{a_1,a_2\dots a_n\}\),其中\(a_i\)表示第\(i\)种物品有\(a_i\)个,令\(S=\sum\limits_{i=1}^{n}a_i\),则该数列进行排列的方案数为\(\dfrac{S!}{a_1!a_2!\dots a_n!}\)
我们可以理解为所有排列的方案数减去相同的方案数
由此我们可以想到先把组合的方案数算出来,对于每一种组合计算排列数再加起来就可以了
对于组合\(a_ib_{k-i}\)我们可以发现它的排列数就是\(\dfrac{k!}{i!(k-i)!}\),所以我们可以定义指数生成函数:
\[G(x)=\sum\limits_{i=0}^n a_i\dfrac{x^i}{i!}
\]
我们代入原题中计算一遍:
\[\begin{equation}
\begin{aligned}
&G_1(x)\times G_2(x)\times G_3(x)\\=&(1+\dfrac{x}{1!}+\dfrac{x^2}{2!}+\dfrac{x^3}{3!})(1+\dfrac{x}{1!}+\dfrac{x^2}{2!})(1+\dfrac{x}{1!}+\dfrac{x^2}{2!}+\dfrac{x^3}{3!})\\=&1+3x+\dfrac{9}{2}x^2+\dfrac{14}{3}x^3+\dfrac{35}{12}x^4+\dfrac{17}{12}x^5+\dfrac{35}{72}x^6+\dfrac{8}{72}x^7+\dfrac{1}{72}x^8
\end{aligned}
\end{equation}
\]
得到的\(x^4\)系数\(\dfrac{35}{12}\)乘上\(4!\)即可得到答案\(70\)
普通生成函数的封闭形式
我们再次观察这个式子:
\[G(x)=\sum\limits_{i=0}^{n}x^i
\]
等比数列求和一波:
\[xG(x)=\sum\limits_{i=1}^{n+1}x^i\\
(1-x)G(x)=1-x^{n+1}\\
G(x)=\dfrac{1-x^{n+1}}{1-x}
\]
我们便把一个多项式的形式化为了一个分数的形式,我们称之为封闭形式
我们再看数列\(\{1,1,1\dots\}\)的生成函数:
\[G(x)=\sum\limits_{i=0}^{\infty}x^i
\]
先给出一个看上去就是错的结论:
\[\begin{equation}
\sum\limits_{i=0}^{\infty}x^i=\dfrac{1}{1-x}
\end{equation}
\]
证明:
令\(S=\sum\limits_{i=0}^{\infty}x^i\)
显然有:
\[xS=\sum\limits_{i=1}^{\infty}x^i\\
(1-x)S=1\\
S=\dfrac{1}{1-x}
\]
注意到我们的违和感就来源于这个式子仅当\(x^{\infty}\)收敛,即\(x\in(-1,1)\)时成立。但是定义时我们就说明过这个式子中的\(x\)无意义,我们关心的只是系数,所以可以人为的让这个函数的定义域为\((-1,1)\)
所以我们证明了\(\sum\limits_{i=0}^{\infty}x^i\)的封闭形式就是\(\dfrac{1}{1-x}\)
我们再给出一个数列\(\{1,2,4,8,16\dots\}\),显然它的生成函数为:
\[\begin{equation}
\begin{aligned}
G(x)&=\sum\limits_{i=0}^{\infty}2^ix^i\\
&=\sum\limits_{i=0}^{\infty}(2x)^i
\end{aligned}
\end{equation}
\]
我们把\(2x\)替换到\((3)\)式中的\(x\)去,可以得到:
\[G(x)=\dfrac{1}{1-2x}
\]
扩展一下?
对于数列\(\{p^0,p^1,p^2\dots\}\),它的生成函数即为\(\dfrac{1}{1-px}\)
我们再看一个数列\(\{1,0,1,0,1,0\dots\}\),显然它的生成函数为:
\[G(x)=1+x^2+x^4+\dots
\]
我们将\(x^2\)替换到\((3)\)式中的\(x\)去,可以得到:
\[G(x)=\dfrac{1}{1-x^2}
\]
再扩展一下?
对于数列\(\{1,0,0\dots0,1,0,0\dots0,1\dots\}\)(每隔\(k\)个\(0\)出现一个\(1\)),它的生成函数即为\(\dfrac{1}{1-x^k}\)
我们现在有:
\[\sum\limits_{i=0}^{\infty}x^i=\dfrac{1}{1-x}
\]
两边都平方得:
\[\sum\limits_{i=1}^{\infty}ix^{i-1}=\dfrac{1}{(1-x)^2}
\]
我们再尝试立方,四次方\(\dots\)即可发现:
\[\sum\limits_{k=0}^{\infty}\begin{pmatrix}k+n-1\\n-1\end{pmatrix}x^k=\dfrac{1}{(1-x)^n}
\]
怎么理解?
我们对于第\(n\)项考虑,这个式子其实就是\(n\)个\(G(x)=1+x+x^2+\dots\)相乘的结果,那么结果中的\(x^n\)的系数显然是在前\(n\)个\(G(x)\)里面随便各挑一项乘积恰好为\(x^n\)的方案数,换句话说就是把\(n\)拆分成\(k\)个非负整数的方案数,隔板法即可
指数生成函数的封闭形式
直接抛结论:
\[\sum\limits_{i=0}^{\infty}\dfrac{x^i}{i!}=e^x
\]
上式由\(e^x\)在\(x_0=0\)处直接泰勒展开即可得到
由此我们也可以推广一些其他的生成函数:
\[e^{-x}=1-\dfrac{x}{1}+\dfrac{x^2}{2!}-\dfrac{x^3}{3!}\dots\\
\dfrac{e^x+e^{-x}}{2}=1+\dfrac{x^2}{2!}+\dfrac{x^4}{4!}\dots\\
\dfrac{e^x-e^{-x}}{2}=\dfrac{x}{1}+\dfrac{x^3}{3!}+\dfrac{x^5}{5!}\dots\\
e^{kx}=1+\dfrac{kx}{1}+\dfrac{k^2x^2}{2!}+\dots
\]
现在我们有了很多生成函数的封闭形式,处理时直接使用封闭形式会简单许多
斐波那契数列通项公式
我们同样可以用生成函数巧妙地求出斐波那契数列的通项公式
我们令斐波那契数列\(\{f_n\}\)的生成函数为\(G(x)\),显然有:
\[G(x)=1+x+2x^2+3x^3+5x^4+8x^5+\dots
\]
推一下式子:
\(
\begin{aligned}
G(x)=1+1x+&2x^2+3x^3+5x^4+8x^5+\dots\\
xG(x)=1x+&1x^2+2x^3+3x^4+5x^5+\dots\\
x^2G(x)=&1x^2+1x^3+2x^4+3x^5+\dots
\end{aligned}
\)
可以发现\(G(x)-xG(x)-x^2G(x)=1\)
解方程可以得到\(G(x)=\dfrac{1}{1-x-x^2}\),如此便得到了\(\{f_n\}\)的生成函数
但是到了这里我们还是不知道系数是多少,因为我们并没有见过这个形式,但我们已知的是\(\dfrac{1}{1-kx}\),所以我们想办法往这上面靠
我们令\(1-x-x^2=(1-\varphi_1x)(1-\varphi_2x)\)
可以解得\(\varphi_1=\dfrac{1+\sqrt{5}}{2},\varphi_2=\dfrac{1-\sqrt{5}}{2}\)
所以\(G(x)=\dfrac{1}{(1-\varphi_1x)(1-\varphi_2x)}\),我们对其进行裂项
令\(G(x)=\dfrac{A}{1-\varphi_1x}+\dfrac{B}{1-\varphi_2x}\),则可以得到关于\(A,B\)的方程:
\[A(1-\varphi_2x)+B(1-\varphi_1x)=1
\]
以\(x\)为主元,整理得:
\[(A+B-1)-(A\varphi_2+B\varphi_1)x=0
\]
所以有:
\[\begin{cases}
A+B-1=0\\
A\varphi_2+B\varphi_1=0
\end{cases}
\]
解得:
\[\begin{cases}
A=\dfrac{1}{\sqrt5}\varphi_1\\
B=-\dfrac{1}{\sqrt5}\varphi_2
\end{cases}
\]
所以有:
\[G(x)=\dfrac{\varphi_1}{\sqrt5}\dfrac{1}{1-\varphi_1x}-\dfrac{\varphi_2}{\sqrt5}\dfrac{1}{1-\varphi_2x}
\]
由前文可知\(\dfrac{1}{1-\varphi_1x}\)的展开形式的第\(n\)项就是\(\varphi_1^n\),\(\varphi_2\)同理,所以\(G(x)\)的第\(n\)项为:
\[\begin{equation}
\begin{aligned}
\dfrac{\varphi_1}{\sqrt5}\varphi_1^n-\dfrac{\varphi_2}{\sqrt5}\varphi_2^n&=\dfrac{1}{\sqrt5}(\varphi_1^{n+1}-\varphi_2^{n+1})\\&=
\dfrac{1}{\sqrt5}((\dfrac{1+\sqrt5}{2})^{n+1}-(\dfrac{1-\sqrt5}{2})^{n+1})
\end{aligned}
\end{equation}
\]
由此便得到了斐波那契数列的通项公式
二阶常系数齐次线性递推数列
我们刚才讨论了使用一般生成函数求解斐波那契数列的通项公式的过程,现在我们尝试扩展:
令:
\[f_n=\begin{cases}p\times f_{n-1}+q\times f_{n-2}\quad &(n>0)\\
m&(n=0)\\0&(n<0)\end{cases}
\]
则该数列的通项公式是什么?
我们还是考虑\(\{f_n\}\)的生成函数\(G(x)\):
\[G(x)=f_0+f_1x+f_2x^2+f_3x^3\dots
\]
构造:
\[\begin{equation}
\begin{aligned}
G(x)=f_0+f_1x+f_2&x^2+f_3x^3\dots\\
pxG(x)= pf_0x+pf_1&x^2+pf_2x^3\dots\\
qx^2G(x)=qf_0&x^2+qf_1x^3+\dots
\end{aligned}
\end{equation}
\]
可以发现:
\[(1-px-qx^2)G(x)=f_0
\]
所以有:
\[G(x)=\dfrac{f_0}{1-px-qx^2}
\]
考虑裂项:
\[\begin{equation}
\dfrac{f_0}{1-px-qx^2}=\dfrac{A}{1-\varphi_1x}+\dfrac{B}{1-\varphi_2x}
\end{equation}
\]
所以有:
\[(1-\varphi_1x)(1-\varphi_2x)=1-px-qx^2\\
1-(\varphi_1+\varphi_2)x+\varphi_1\varphi_2x^2=1-px-qx^2\\
\begin{cases}
\varphi_1+\varphi_2=p\\
\varphi_1\varphi_2=-q
\end{cases}
\]
由韦达定理可知\(\varphi_1,\varphi_2\)为方程\(x^2-px-q=0\)的根
所以:
\[\begin{cases}
\varphi_1=\dfrac{p+\sqrt{p^2+4q}}{2}\\
\varphi_2=\dfrac{p-\sqrt{p^2+4q}}{2}
\end{cases}
\]
同时由\((2)\)式可知:
\[A(1-\varphi_2x)+B(1-\varphi_1x)=f_0\\
A-A\varphi_2x+B-B\varphi_1x=f_0\\
(A+B-f_0)-(A\varphi_2+B\varphi_1)x=0
\]
注意到生成函数中的\(x\)无实际意义(即可以任意取值),同时上式恒成立,故有:
\[\begin{cases}
A+B-f_0=0\\
A\varphi_2+B\varphi_1=0
\end{cases}
\]
解得:
\[\begin{cases}
A=\dfrac{\varphi_1f_0}{\varphi_1-\varphi_2}\\
B=\dfrac{\varphi_2f_0}{\varphi_2-\varphi_1}
\end{cases}
\]
由
\[G(x)=\dfrac{A}{1-\varphi_1x}+\dfrac{B}{1-\varphi_2x}
\]
可知:
\[\begin{equation}
\begin{aligned}
f_n&=A\varphi_1^n+B\varphi_2^n\\
&=\dfrac{\varphi_1f_0}{\varphi_1-\varphi_2}\varphi_1^n+\dfrac{\varphi_2f_0}{\varphi_2-\varphi_1}\varphi_2^n\\
&=\dfrac{\varphi_1^{n+1}-\varphi_2^{n+1}}{\varphi_1-\varphi_2}f_0\\
&=\dfrac{\dfrac{(p+\sqrt{p^2+4q})^{n+1}-(p-\sqrt{p^2+4q})^{n+1}}{2^{n+1}}}{\sqrt{p^2+4q}}f_0\\
&=\dfrac{(p+\sqrt{p^2+4q})^{n+1}-(p-\sqrt{p^2+4q})^{n+1}}{2^{n+1}\sqrt{p^2+4q}}f_0
\end{aligned}
\end{equation}
\]
由此我们便求得了任意二阶常系数齐次线性递推数列的通项公式
不难发现,对于一个递推式,我们可以通过构造其生成函数和相关的多项式求得其生成函数的封闭形式,然后通过常规裂项展开即可求得该生成函数的任意项系数,即原数列的任意项
牛顿二项式定理
我们重新定义组合数:
\[\begin{pmatrix}r\\k\end{pmatrix}=\dfrac{r^\underline{k}}{k!}\quad (r\in \text{C},k\in \text{N})
\]
则对于\(\alpha \in \text{C}\),有:
\[(1+x)^{\alpha}=\sum\limits_{n\ge 0}\begin{pmatrix}\alpha\\n\end{pmatrix}x^n
\]
不难发现二项式定理为其中的特殊情况
卡特兰数的通项公式
首先给出卡特兰数的递推公式:
\[c_n=\begin{cases}1&(n=0\;or\;1)\\\sum\limits_{i=0}^{n}c_ic_{n-i-1}\quad &(n\ge 2)\end{cases}
\]
构造生成函数:
\[\begin{equation}
\begin{aligned}
C(x)&=\sum\limits_{n\ge 0}c_nx^n\\
&=1+\sum\limits_{n\ge 0}\sum\limits_{i=0}^{n}c_ic_{n-i-1}x^n\\
&=1+\sum\limits_{n\ge 0}\sum\limits_{i=0}^{n}c_ix^ic_{n-i-1}x^{n-i-1}x\\
&=1+x\sum\limits_{i\ge 0}c_ix^i\sum\limits_{n\ge 0}c_nx^n\\
&=1+xC^2(x)
\end{aligned}
\end{equation}
\]
所以可以解得:
\[\begin{equation}
\begin{aligned}
C(x)&=\dfrac{1\pm\sqrt{1-4x}}{2x}\\
&=\dfrac{2}{1\mp\sqrt{1-4x}}
\end{aligned}
\end{equation}
\]
观察到当\(x=0\)时\(C(x)=c_0=1\),所以可以确定:
\[C(x)=\dfrac{1-\sqrt{1-4x}}{2x}
\]
发现这里不好像以往一样展开,考虑用牛顿二项式定理展开\(\sqrt{1-4x}\):
\[\begin{equation}
\begin{aligned}
(1-4x)^{\frac{1}{2}}&=\sum\limits_{n\ge 0}\begin{pmatrix} \frac{1}{2} \\ n\end{pmatrix}(-4x)^n\\
&=1+\sum\limits_{n\ge 1} \dfrac{(\frac{1}{2})^\underline{n}}{n!}(-4x)^n
\end{aligned}
\end{equation}
\]
考虑展开\(\left(\dfrac{1}{2}\right)^\underline{n}\):
\[\begin{equation}
\begin{aligned}
\left(\dfrac{1}{2}\right)^\underline{n}&=\dfrac{1}{2}\dfrac{-1}{2}\dfrac{-3}{2}\dots \dfrac{-(2n-3)}{2}\\
&=\dfrac{(-1)^{n-1}(2n-3)!!}{2^n}\\
&=\dfrac{(-1)^{n-1}(2n-2)!}{2^n(2n-2)!!}\\
&=\dfrac{(-1)^{n-1}(2n-2)!}{2^{2n-1}(n-1)!}
\end{aligned}
\end{equation}
\]
带回原式即可得到:
\[\begin{equation}
\begin{aligned}
(1-4x)^{\frac{1}{2}}&=1+\sum\limits_{n\ge 1}\dfrac{(-1)^{n-1}(2n-2)!}{2^{2n-1}(n-1)!n!}(-4x)^n\\
&=1+\sum\limits_{n\ge 1}\dfrac{(-1)^{n-1}(-4)^n(2n-2)!}{2^{2n-1}(n-1)!n!}x^n\\
&=1-\sum\limits_{n\ge 1}\dfrac{4^n(2n-2)!}{2^{2n-1}(n-1)!n!}x^n\\
&=1-\sum\limits_{n\ge 1}\dfrac{2^{2n}(2n-2)!}{2^{2n-1}(n-1)!n!}x^n\\
&=1-\sum\limits_{n\ge 1}\dfrac{(2n-2)!}{(n-1)!n!}2x^n\\
\end{aligned}
\end{equation}
\]
所以有:
\[\begin{equation}
\begin{aligned}
C(x)&=\dfrac{1-\sqrt{1-4x}}{2x}\\
&=\dfrac{1}{2x}\sum\limits_{n\ge 1}\dfrac{(2n-2)!}{(n-1)!n!}2x^n\\
&=\sum\limits_{n\ge 1}\dfrac{(2n-2)!}{(n-1)!n!}x^{n-1}\\
&=\sum\limits_{n\ge 0}\dfrac{(2n)!}{n!(n+1)!}x^n\\
&=\sum\limits_{n\ge 0}\dfrac{1}{n+1}\dfrac{(2n)!}{n!n!}x^n\\
&=\sum\limits_{n\ge 0}\dfrac{1}{n+1}\begin{pmatrix}2n\\n\end{pmatrix}x^n
\end{aligned}
\end{equation}
\]
故有:
\[c_n=\dfrac{1}{n+1}\begin{pmatrix}2n\\n\end{pmatrix}
\]
于是我们便求出了卡特兰数的通项公式
例题
给你1克、2克、3克、4克的砝码各一枚,称出1~10克的方案分别有多少种?
每个砝码只能取\(0/1\)件,所以生成函数就是\(1+x^w\),其中\(w\)为质量
然后乘起来:
\(
\begin{aligned}
&(1+x)(1+x^2)(1+x^3)(1+x^4)\\=&
1+x+x^2+2x^3+2x^4+2x^5+2x^6+2x^7+x^8+x^9+x^{10}
\end{aligned}
\)
取第\(k\)项系数即可
洛谷P2000 拯救世界
为了拯救世界,小 a 和 uim 决定召唤出 kkksc03 大神和 lzn 大神。根据古籍记载,召唤出任何一位大神,都需要使用金木水火土五种五行神石来摆一个特定的大阵。而在古籍中,记载是这样的:
kkksc03 大神召唤方法:
金神石的块数必须是 6 的倍数。
木神石最多用 9 块。
水神石最多用 5 块。
火神石的块数必须是 4 的倍数。
土神石最多用 7 块。
lzn 大神召唤方法:
金神石的块数必须是 2 的倍数。
木神石最多用 1 块。
水神石的块数必须是 8 的倍数。
火神石的块数必须是 10 的倍数。
土神石最多用 3 块。
现在是公元 1999 年 12 月 31 日,小 a 和 uim 从 00:00:00 开始找,一直找到 23:00:00,终于,还是没找到神石。不过,他们在回到家后在自家地窖里发现了一些奇怪的东西,一查古籍,哎呦妈呀,怎么不早点来呢?这里有一些混沌之石,可以通过敲击而衰变成五行神石。于是,他们拼命地敲,终于敲出了n块神石,在 23:59:59 完成了两座大阵。然而,kkksc03 大神和 lzn 大神确实出现了,但是由于能量不够,无法发挥神力。只有把所有用 nn 块神石可能摆出的大阵都摆出来,才能给他们充满能量。这下小 a 和 uim 傻了眼了,赶快联系上了你,让你帮忙算一下,一共有多少种大阵。
\(10^{100000}\le n\le 10^{100001}\)
我们对于每个条件都构造出一个生成函数:
\(
1+x^6+x^{12}+\dots=\dfrac{1}{1-x^6}\\
1+x+x^2+\dots+x^9=\dfrac{1-x^{10}}{1-x}\\
1+x+x^2+\dots+x^5=\dfrac{1-x^6}{1-x}\\
1+x^4+x^8+\dots=\dfrac{1}{1-x^4}\\
1+x+x^2+\dots+x^7=\dfrac{1-x^8}{1-x}\\
1+x^2+x^4+\dots=\dfrac{1}{1-x^2}\\
1+x=\dfrac{1-x^2}{1-x}\\
1+x^8+x^{16}+\dots=\dfrac{1}{1-x^8}\\
1+x^{10}+x^{20}+\dots=\dfrac{1}{1-x^{10}}\\
1+x+x^2+x^3=\dfrac{1-x^4}{1-x}
\)
全部乘起来发现结果为\(\dfrac{1}{(1-x)^5}\),展开后的第\(n\)项系数即为\(\begin{pmatrix}n+4\\ 4\end{pmatrix}\),用FFT/NTT维护高精度乘法即可
把 \(n\) 个相异的球放到\(4\) 个相异盒\(A_1,A_2,A_3,A_4\)中,求使得 \(A_1\) 中含有奇数个球,\(A_2\)含有偶数个球的不同放球方法数
注意到这里各个盒子和球是相异的,所以构造指数生成函数:
\[\begin{equation}
\begin{aligned}
&(x+\dfrac{x^3}{3!}+\dfrac{x^5}{5!}+\dots)(1+\dfrac{x^2}{2!}+\dfrac{x^4}{4!}+\dots)(1+x+\dfrac{x^2}{2!}+\dots)^2\\=&\dfrac{e^x-e^{-x}}{2}\dfrac{e^x+e^{-x}}{2}e^{2x}\\
=&\dfrac{1}{4}(e^{4x}-1)\\
=&\sum\limits_{i=1}^{\infty}\dfrac{4^n}{4n!}x^n
\end{aligned}
\end{equation}
\]
于是答案为\(\dfrac{4^n}{4n!}\times n!=4^{n-1}\)
[国家集训队]整数的lqp拆分
给出\(n\),求\(\sum\prod\limits_{i=1}^mf_{a_i}\mod 10^9+7\),其中\(f_i=f_{i-1}+f_{i-2},a_1,a_2\dots a_m>0\)且\(\sum\limits_{i=1}^{m}a_i=n\)
\(1\le n\le 10^{10000}\)
令\(g_n\)为答案,显然有递推式:
\[g_n=\sum\limits_{i=1}^{n}g_if_{n-i}
\]
其中\(g_0=1\)
上式可以理解为已经选择的数的和为\(i\),再选最后一个数\(n-i\)的结果
考虑\(\{g_n\}\)的生成函数:
\[G(x)=1+\sum\limits_{n\ge 1}\sum\limits_{i=1}^{n}g_if_{n-i}x^n
\]
观察到后面是个卷积的形式,所以可以发现:
\[\sum\limits_{n\ge 1}\sum\limits_{i=1}^{n}g_if_{n-i}x^n=F(x)\times G(x)
\]
其中\(F(x)\)为斐波那契数列的生成函数
所以有:
\[G(x)=1+G(x)\times F(x)
\]
我们之前已经证明了斐波那契数列的生成函数为\(\dfrac{1}{1-x-x^2}\),代入即可得到:
\[\begin{equation}
\begin{aligned}
G(x)&=\dfrac{1-x-x^2}{1-2x-x^2}\\
&=1+\dfrac{x}{1-2x-x^2}
\end{aligned}
\end{equation}
\]
所以我们现在的问题就是怎么展开\(\dfrac{x}{1-2x-x^2}\)
照样裂项:
\[\dfrac{x}{1-2x-x^2}=\dfrac{A}{1-\varphi_1x}+\dfrac{B}{1-\varphi_2x}\\
1-(\varphi_1+\varphi_2)x+\varphi_1\varphi_2x^2=1-2x-x^2\\
\begin{cases}
\varphi_1+\varphi_2=2\\
\varphi_1\varphi_2=-1
\end{cases}
\]
所以有:
\[ \begin{cases}
\varphi_1=1+\sqrt2\\
\varphi_2=1-\sqrt2
\end{cases}
\]
同时:
\[A(1-\varphi_2x)+B(1-\varphi_1x)=x\\
(A+B)-(A\varphi_2+B\varphi_1+1)x=0
\]
所以:
\[\begin{cases}
A+B=0\\
A\varphi_2+B\varphi_1+1=0
\end{cases}\\
\begin{cases}
A=\dfrac{1}{\varphi_1-\varphi_2}\\
B=\dfrac{1}{\varphi_2-\varphi_1}
\end{cases}
\]
带回生成函数中:
\[\begin{equation}
\begin{aligned}
g_n&=\dfrac{1}{\varphi_1-\varphi_2}\varphi_1^n+\dfrac{1}{\varphi_2-\varphi_1}\varphi_2^n\\
&=\dfrac{\varphi_1^n-\varphi_2^n}{\varphi_1-\varphi_2}\\
&=\dfrac{(1+\sqrt2)^n-(1-\sqrt2)^n}{2\sqrt2}\\
&=\dfrac{\sqrt2}{4}((1+\sqrt2)^n-(1-\sqrt2)^n)
\end{aligned}
\end{equation}
\]
到此便求出了答案
注意到\(59713600^2\mod 10^9+7=2\),所以\(\sqrt2\mod 10^9+7=59713600\)
同时\(n\)非常大,读入\(n\)的时候用费马小定理取模即可