设 `{a_n}` 是一个数列, 则 `sum_(n ge 0) a_n x^n`, `quad sum_(n ge 0) a_n x^n/n!`, `quad sum_(n ge 1) a_n /n^s` 分别称为这个数列的普通型生成函数, 指数型生成函数, Dirichlet 生成函数.
[来自群友 凡人比肩神明, 3b1b《奥数级别的数数问题》] 求集合 `A = [1...2000]` 中, 有多少个子集的元素之和是 10 的倍数?
分拆数 (partition number) [在线计算] [A000041] `p_n(m)` 定义为非负整数 `m` 拆成 `n ge 1` 个非负整数之和的方法数. 这等于将 `m` 拆成不超过 `n` 个正整数之和的方法数. 例如, 将 `m` 个相同苹果放入 `n` 个相同篮子. 特别简记 `p_n = p_n(n)`, 并约定 `p_0 = 1`. 例如, 5 = 5 = 4 + 1 = 3 + 2 = 3 + 1 + 1 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 5*1, 共 7 种分拆方法, 因此 `p_5 = 7`.
* * * * *上图一列一列地看, 又可得到另一种分拆 5 = 3 + 2.
`n` | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
`p_n` | 1 | 1 | 2 | 3 | 5 | 7 | 11 | 15 | 22 | 30 |
找零问题 用 10 张 1 元、3 张 2 元、2 张 5 元的零钞支付 17 元, 共有几种可能的方法?
考虑生成函数 `f(x) = (1 + x + cdots + x^10)(1 + x^2 + x^4 + x^6)(1 + x^5 + x^10)`, 每个因子代表一种面额, 因子的项数代表该种面额的钞票可取的数目. 支付时, 从每种面额中取出一定的数目, 即从每个因子中取出一项相乘, 因此 `f(x)` 的 17 次项系数就是所求的答案.
分拆数的生成函数 `sum_(n ge 0) p_n x^n` `= prod_(n ge 1) 1/(1-x^n)`.
这是找零问题的推广. 我们有任意正整数面额的钞票, 每种钞票可取任意多张. 因此生成函数为 `prod_(n ge 1) (1 + x^n + x^(2n) + cdots)` `= prod_(n ge 1) 1/(1-x^n)`.
Euler 等分定理 `n` 的分拆中每份大小都不同的方法数, 等于 `n` 的分拆中每份大小都为奇数的方法数: `p_n("distinct") = p_n("odd")`.
计算两者的生成函数. 对于 `p_n("distinct")`, 每份的大小 `l_k = 0` 或 `1`, `sum_(n ge 0) p_n("distinct") x^n` `= prod_(n ge 1) (1 + x^n)`, 对于 `p_n("odd")`, 只保留 `p_n` 的生成函数乘积中的第奇数个因子: `sum_(n ge 0) p_n("odd") x^n` `= prod_(n ge 1) 1/(1-x^(2n-1))`. 为证明两式相等, 相除等到 `prod_(n ge 1) (1 + x^n)(1-x^(2n-1))` `= prod_(n ge 1) (1 + x^(2n)) (1+x^(2n-1))(1-x^(2n-1))` `= prod_(n ge 1) (1 + x^(2n)) (1 - x^(4n-2))`. 上式记为 `f(x)`, 则有 `f(x) = f(x^2)`. 由连续性知道 `f(x) -= f(0) = 1`.
Euler 五角数定理 `prod_(n ge 1) (1-x^n)` `= sum_(n=-oo)^oo (-1)^n x^(n(3n-1)//2)`. 注: 将 `n=5` 代入 `n` 角数通项公式 `(n-2)k(k-1)//2 + k` 得到 `k(3k-1)//2`.
全体形式幂级数记为 `CC[[x]]`, 其中的元素形如 `sum_(n ge 0) a_n x^n`;
全体形式 Laurent 级数记为 `CC((x))`, 其中元素形如 `sum_(n ge -N) a_n x^n`.
`CC[[x]]` 和 `CC((x))` 分别构成环和域. 在研究形式级数的时候,
我们只进行形式的计算, 不关心它们的收敛性.
若 `f` 是形式级数, 我们用 `[x^n] f(x)` 表示它的 `n` 次项系数.
特别当 `f` 是形式幂级数时, 有
`[x^n] f(x) = 1/n! {:("d"^n f)/dx^n|_(x=0)`.
Lagrange 反演公式 设 `f(x), g(x)` 是形式幂级数, `f(0) = 0`, `f'(0) != 0`, `g(0) = 0`, `g'(0) != 0`. 若 `f, g` 互逆, 即 `g(f(x)) = f(g(x)) = x`, 则 `[x^n] g(x) = [x^-1] 1//f(x)^n = [x^(n-1)] (x//f(x))^n`.
设 `g(x) = sum_(k ge 1) b_k x^k`, 由 `g(f(x)) = x` 知道 `sum_(k ge 1) b_k f(x)^k = x`. 两边求导, 再同除以 `f(x)^n` 得 `sum_(k ge 1) k b_k f(x)^(k-1-n) f'(x) = f(x)^-n`. 两边取 `-1` 次项系数, 由引理 `[x^-1] f(x)^(k-1-n) f'(x) = 1` 当且仅当 `k = n`, 因而 `n b_n = [x^-1] f(x)^-n`. 证毕.