非专业生成函数学习小记

下文中的序列从 \(0\) 开始标号。

普通生成函数 / OGF

定义序列 \(A\) 的普通生成函数为:

\[\sum\limits_{i=0}^{+ \infty} a_i x^i \]

我们考虑普通生成函数的作用。

首先,这里的 \(x\) 只是一个记号,起到将同类项合并起来的作用。

也就是说:

\[(\sum\limits_{i=0}^{+ \infty} a_i x^i) \times (\sum\limits_{i=0}^{+ \infty} b_i x^i) = \sum\limits_{i=0}^{+ \infty} (\sum\limits_{j + k = i} a_j b_k) x^i \]

普通生成函数具有一些常见的封闭形式,比如对于序列 \([1,1,1,\dots]\),其普通生成函数:

\[\sum\limits_{i=0}^{+ \infty} x^i = \dfrac{1}{1-x} \]

对于序列 \([1,p,p^2,\dots]\),其普通生成函数:

\[\sum\limits_{i=0}^{+ \infty} p^i x^i = \dfrac{1}{1-px} \]

例题

首先,我们需要求出斐波那契数列的生成函数。

根据题目中的定义,斐波那契数列 \(F=[0,1,1,2,3,5,8,\dots]\),故其普通生成函数:

\[f(x) = 0 x^0 + 1 x^1 + 1 x^2 + 2 x^3 + 3 x^4 + 5 x^5 + 8 x^6 + ... \]

根据定义,我们可以得知:

\[ \dfrac{f(x)}{x} = 1 x^0 + 1 x^1 + 2 x^2 + 3 x^3 + 5 x^4 + 8 x^5 + 13 x^6 + ... \]

以及:

\[ f(x) \times x = 0 x^0 + 0 x^1 + 1 x^2 + 1 x^3 + 2 x^4 + 3 x^5 + 5 x^6 + ... \]

此时我们发现,\(f(x) + f(x) \times x + 1= \dfrac{f(x)}{x}\)。

两边同乘 \(x\),\(f(x) \times x + f(x) \times x^2 + x = f(x)\)。

也就是说,\(f(x) \times (x^2 + x - 1) + x = 0\)。

最后得到 \(f(x) = \dfrac{x}{1 - x - x^2}\)。

我们希望求出:

\[\sum\limits_{a_1 + a_2 + \dots = n} \prod\limits_i F_{a_i} \]

注意这里我们可能会带上 \(F_0\),但 \(F_0 = 0\) 对答案不会有影响。

这和我们推出普通生成函数乘积的性质几乎一样,也就是说,答案为:

\[(\sum\limits_{i=1}^{+ \infty} f(x)^i) [x^n] \]

注意,虽然这里将 \(f(x)^0\) 带上没有区别,但题目中要求了 \(a\) 的长度 \(\geq 1\)。

写成封闭形式:

\[(\dfrac{f(x)}{1-f(x)}) [x^n] \]

最后带入,可得:

\[(\dfrac{\frac{x}{1-x-x^2}}{1-\frac{x}{1-x-x^2}}) [x^n] = (\dfrac{x}{1-x-x^2-x}) [x^n] = (\dfrac{x}{1-2x-x^2}) [x^n] \]

接下来我们需要从封闭形式变回原先的形式。

先考虑对分母 \(1-2x-x^2\) 求出两个根:\(x_1 = -1-\sqrt{2}\) 和 \(x_2 = -1+\sqrt{2}\)。

也就是说,\(\dfrac{x}{1-2x-x^2}=-\dfrac{x}{(x-x_1)(x-x_2)}\)

裂项,得 \(-\dfrac{x}{(x-x_1)(x-x_2)}=\dfrac{x}{x_2 - x_1} \times \dfrac{(x-x_2)-(x-x_1)}{(x-x_1)(x-x_2)}\)。

化简一下,就是 \(\dfrac{x}{x_2 - x_1} \times (\dfrac{1}{x-x_1} - \dfrac{1}{x-x_2})\)。

我们发现 \(\dfrac{1}{1-px}\) 具有良好的性质,考虑变形:

\[\dfrac{x}{x_2 - x_1} \times (-\dfrac{1}{x_1} \times \dfrac{1}{1 - \frac{x}{x_1}} + \dfrac{1}{x_2} \times \dfrac{1}{1 - \frac{x}{x_2}}) \]

也就是:

\[\dfrac{x}{x_2 - x_1} \times (\dfrac{1}{x_2} \times \sum\limits_{i=0}^{+ \infty} \dfrac{x^i}{x_2^i} - \dfrac{1}{x_1} \times \sum\limits_{i=0}^{+ \infty} \dfrac{x^i}{x_1^i}) \]

化一下:

\[\dfrac{1}{x_2 - x_1} \times (\sum\limits_{i=1}^{+ \infty} \dfrac{x^i}{x_2^i} - \sum\limits_{i=1}^{+ \infty} \dfrac{x^i}{x_1^i}) \]

由于题目中的 \(n \geq 1\),所以答案为 \(\dfrac{1}{x_2-x_1} \times(\dfrac{1}{x_2^n} - \dfrac{1}{x_1^n})\)。

也就是,\(\dfrac{\sqrt{2}}{4} \times ((\dfrac{1}{-1+\sqrt{2}})^n - (\dfrac{1}{-1-\sqrt{2}})^n)\)。

即 \(\dfrac{\sqrt{2}}{4} \times ((1+\sqrt{2})^n - (1-\sqrt{2})^n)\)。

但是还没有结束,因为我们需要找到 \(\sqrt{2}\) 的实际值。

我们发现 \(\sqrt{2}\) 在模 \(10^9+7\) 意义下可以取 \(59713600\) 或 \(940286407\)。

事实上,我们会安排其中一个作为 \(\sqrt{2}\),另一个为 \(-\sqrt{2}\)。

所以 \(ans \equiv 14928400 \times (59713601^n - 940286408^n) \pmod {10^9+7}\)。

指数生成函数 / EGF

定义序列 \(A\) 的指数生成函数为:

\[\sum\limits_{i=0}^{+ \infty} a_i \dfrac{x^i}{i!} \]

我们考虑指数生成函数的作用。

首先,这里的 \(x\) 只是一个记号,起到将同类项合并起来的作用。

也就是说:

\[(\sum\limits_{i=0}^{+ \infty} a_i \dfrac{x^i}{i!}) \times (\sum\limits_{i=0}^{+ \infty} b_i \dfrac{x^i}{i!}) = \sum\limits_{i=0}^{+ \infty} (\sum\limits_{j + k = i} a_j b_k \dbinom{j+k}{j,k}) \dfrac{x^i}{i!} \]

指数生成函数具有一些常见的封闭形式,比如对于序列 \([1,1,1,\dots]\),其指数生成函数:

\[\sum\limits_{i=0}^{+ \infty} \dfrac{x^i}{i!} = e^x \]

对于序列 \([1,p,p^2,\dots]\),其指数生成函数:

\[\sum\limits_{i=0}^{+ \infty} p^i\dfrac{x^i}{i!} = e^{px} \]

例题

首先考虑指数生成函数乘积的作用,发现其可以回答排列两种元素的方案数。

显然固定个数的一种基因内部只有一种排列方法,故写出三种生成函数。

任意次数 \([1,1,1,1,\dots]\):\(\sum\limits_{i=0}^{+ \infty} \dfrac{x^i}{i!} = e^x\)。

奇数次 \([0,1,0,1,\dots]\):\(\sum\limits_{i=0}^{+ \infty} \dfrac{x^{2i+1}}{(2i+1)!} = \dfrac{\sum\limits_{i=0}^{+ \infty} \frac{x^i}{i!} - \sum\limits_{i=0}^{+ \infty} \frac{(-x)^i}{i!}}{2} = \dfrac{e^x-e^{-x}}{2}\)。

偶数次 \([1,0,1,0,\dots]\):\(\sum\limits_{i=0}^{+ \infty} \dfrac{x^{2i}}{(2i)!} = \dfrac{\sum\limits_{i=0}^{+ \infty} \frac{x^i}{i!} + \sum\limits_{i=0}^{+ \infty} \frac{(-x)^i}{i!}}{2} = \dfrac{e^x+e^{-x}}{2}\)。

也就是说,答案的生成函数应该为 \(\dfrac{(e^x(e^x - e^{-x})(e^x + e^{-x}))^4}{256}\)。

化简一下,应该是 \(\dfrac{(e^{3x} - e^{-x})^4}{256}\),即:

\[\dfrac{e^{12x}}{256} - \dfrac{e^{8x}}{64} + 3 \times \dfrac{e^{4x}}{128} - \dfrac{e^0}{64} + \dfrac{e^{-4x}}{256} \]

也就是说,答案为:

\[\dfrac{12^n}{256} - \dfrac{8^n}{64} + 3 \times \dfrac{4^n}{128} - \dfrac{0^n}{64} + \dfrac{(-4)^n}{256} \]

或者为了更清楚一点,答案为:

\[\dfrac{1}{256} \times (12^n - 4 \times 8^n + 6 \times 4^n - 4 \times 0^n + (-4)^n) \]

然而 \(n \geq 1\),所以答案为:

\[\dfrac{1}{256} \times (12^n - 4 \times 8^n + 6 \times 4^n + (-4)^n) \]

但是模数是 \(10^9\),我们无法找到逆元,于是需要进行分类讨论。

\(n \leq 3\) 时,直接暴力计算即可。但是根据这题的实际意义,此时答案都是 \(0\)。

\(n \geq 4\) 时,答案可以表示成:

\[81 \times 12^{n-4} - 8^{n-2} + 6 \times 4^{n-4} + (-4)^{n-4} \]

posted @ 2026-03-19 11:01  Oken喵~  阅读(33)  评论(0)    收藏  举报