生成函数学习笔记
前置知识
一些公式
\[1+x+x^2+\cdots=\frac 1 {1-x}\\
1+\frac x {1!} +\frac {x^2} {2!}+\cdots=e^x\\
1+2x+3x^2+\cdots=\frac 1 {(1-x)^2}=\frac 1 {1-x} * \frac 1 {1-x}\\
\]
普通生成函数(OGF)
定义
定义:如果序列 有通项公式,那么它的普通生成函数的系数就是通项公式。所以生成函数没有实际上的作用,只是为了运算方便。
举个例子
序列 \(\{1,2,4,8,\cdots\}\) 的生成函数是 \({\sum\limits_{n \geq 0} 2^nx^n}\)。
运算
\[\begin{aligned}
& F(x) \pm G(x)=\sum\limits_{n} (a_n+b_n)x^n\\
& F(x) \times G(x)=\sum\limits_{n} x^n \sum\limits_{m=0}^n a_mb_{n-m}
\end{aligned}
\]
例子
Pro 1
在 \(1,3,5,7,9\) 选数字,\(3,7\) 只能选偶数次,\(1,5,7\) 只能选奇数次。求组成的多位数的个数。
\[\begin{aligned}
& (1+x+\frac {x^2} {2!}+\cdots)^3(1+\frac {x^2} {2!}+\frac {x^4} {4!}\cdots)^2\\
= & e^{3x} (\frac {e^x+e^{-x}} {2})^2\\
= & \frac 1 4 e^{3x} (e^{2x}+2+e^{-2x})\\
= & \frac 1 4 (e^{5x}+2 \times e^{3x}+e^x)
\end{aligned}
\]
Pro 2
\[\begin{aligned}
\prod\limits_{i=1}^n\sum\limits_{j=0}^{m_i} x^j
& =\prod\limits_{i=1}^n \frac {x^{m_i+1}-1} {x-1}\\
& = (\frac 1 {1-x})^n\prod 1-x^{m_i+1}\\
& = (1-x)^{-n} \prod 1-x^{m_i+1}\\
& = \prod (1-x^{m_i+1}) (\sum\limits_{j\geq 0}\binom {-n} {j} (-x)^j)\\
& =\prod (1-x^{m_i+1}) (\sum \limits_{j \geq 0} \frac {(-n)!} {j!(-n-j)!} (-x)^j)\\
& =\prod (1-x^{m_i+1}) (\sum\limits_{j \geq 0}\frac {(-n)\cdots(-n-j+1)} {j!} (-x)^j)\\
& =\prod (1-x^{m_i+1}) (\sum\limits_{j \geq 0}\binom {n+j-1} {j} x^j)
\end{aligned}
\]
前面直接 dfs,后面随便推一下就化简了。至于取模,将模数弄大,然后直接除就可以了。

浙公网安备 33010602011771号