生成函数和多项式
萌新刚学 OI,可能有一堆笔误,请见谅。
特征根法求序列通项
考虑常系数齐次线性递推
我们已知 \(b_i\),不知道 \(a_i\) 的初始值(前 \(k\) 项),求 \(a_i\) 的通解。
首先感性理解 \(a_i\) 的解是一个 \(k\) 阶的线性空间(可以分解为 \(k\) 组基,相互之间线性无关并且可以线性组合出所有解),因为解肯定是线性空间,并且前 \(k\) 项的值唯一确定一组解,所以阶数应该是 \(k\)。
然后,考虑求出 \(k\) 组特解。假设特解是 \(a_n=r^{n}\) 的形式(\(r\) 是一实数),那么根据递推式,有
同时除以 \(r^{n-k}\):
这是一个 \(k\) 次方程。考虑解出 \(k\) 个根 \(r_0\sim r_{k-1}\),网上有详细分析重根和虚根的情况,总是可以产生 \(k\) 个线性无关的特解(其实是我不会)。代入初值解出系数,即可获得通项公式。
定义
给定序列 \(f_{0\sim ?}\),定义其生成函数 \(F(x)\) 为幂级数(多项式)
序列可以是有限的,也可以是无限的。定义生成函数的加法、减法为对位相加减,乘法为卷积,结果都仍然是生成函数。注意这里的 \(x\) 并不能取某一具体数值,而是一个占位符,方便我们定义生成函数的运算。我们重点关注的是多项式的系数。
乘法的单位元是 \(1\)(常数项等于 \(1\),其他项为 \(0\) 的多项式)。若生成函数的常数项不为 \(0\),那么它存在乘法逆元。这个条件显然必要,下面给出构造证明其充分性:
对于生成函数 \(F(x)=\sum_{i=0}a_ix^i~(a_0\ne 0)\),设其乘法逆 \(F^{-1}(x)=\sum_{i=0}b_ix_i\)。那么由定义得 \(b_0=(a_0)^{-1}\)。对于剩下的部分,考虑逐位递推:
这样显然 \(F(x)*F^{-1}(x)=1\)。
封闭形式
考虑一个例子,对于生成函数
考虑到 \(xF(x)+1=F(x)\),通过移项可以得到:
这样的东西叫做封闭形式。
更多生成函数的封闭形式
等比数列 \(1,p,p^2,p^3,\cdots\),满足 \(pxF(x)+1=F(x)\),因此其封闭形式为
不知道叫啥的东西 \(F(x)=\sum_{i=0}x^{ip}\),满足 \(x^pF(x)+1=F(x)\),因此其封闭形式为
斐波那契数列 \(0,1,1,2,3,5,8,13,\cdots\),满足 \((x+x^2)F(x)+x=F(x)\),因此其封闭形式为
P4451 [国家集训队] 整数的lqp拆分
给定正整数 \(m\),求
第一个 \(\sum\) 表示枚举所有长度任意,取值为正整数的序列;\(fib(n)\) 表示斐波那契数列的第 \(n\) 项。
\(m\le 10^{1000}\),答案对 \(10^9+7\) 取模的结果。
考虑斐波那契数列的生成函数 \(F(x)\),答案的生成函数 \(G(x)\),那么有
因此 \(G(x)=G(x)F(x)+1\),因此
因此
\(g\) 是一个常系数齐次线性递推,考虑如何求出 \(g\) 的通项公式。先写出递推式:
解出特征根 \(x_1=\frac{1+\sqrt 2}{2},x_2=\frac{1-\sqrt 2}{2}\),代入初值
解得通项公式为
\(2\) 在模 \(10^9+7\) 下有二次剩余,直接本地跑出来即可。
代码
P4931 [MtOI2018] 情侣?给我烧了!(加强版)
有 \(n\) 对情侣来到电影院观看电影。在电影院,恰好留有 \(n\) 排座位,每排包含 \(2\) 个座位,共 \(2n\) 个座位。
现在,每个人将会随机坐在某一个位置上,且恰好将这 \(2n\) 个座位坐满。问恰好有 \(k\) 对情侣坐在同一排的方案数。
\(T\le 2\times 10^5,~n\le 5\times 10^6\)
答案可以写成
其中 \(D_n\) 表示 \(n\) 对情侣恰好 \(0\) 对和睦的方案数。考虑容斥,\(D_n\) 可以写成
仍然不好计算(递推式也不好直接看出来),考虑把组合数拆开:
然后把和 \(k\) 有关的以及和 \(n-k\) 有关的分离开,写成卷积的形式:
注意到
设
考虑如何求出 \([x^n]F(x)\) 的递推式。求导:
即 \((1-4x)F'(x)=8xF(x)\),考虑第 \(n\) 次项系数,得到 \((n+1)f_{n+1}-4nf_n=8f_{n-1}\),直接递推即可,记得乘以 \((n!)^2\)。