奇妙的生成函数
生成函数无敌!这些章节都是想到哪写到哪,不要在意顺序
对小质数取模的一些东西
\(\text{Lucas}\) 定理:
证明:
观察 \((1+x)^p \bmod p\) ,有 \((1+x)^p \equiv \sum_{i=0}^{p}\binom{p}{i}x^i \equiv 1+x^p \pmod p\) ,对于 \(n \ge p\) ,令 \(n=ap+b\) ,有
\[(1+x)^n \equiv (1+x)^{ap+b} \equiv \big[(1+x)^p\big]^a(1+x)^b \equiv (1+x^p)^a(\sum_{i=0}^b \binom{b}{i}x^i) \pmod p \]由于 \((1+x^p)^a\) 系数非 \(0\) 的次数形如 \(kp(k \in \mathbb{N})\) ,又因为 \(b<p\) ,令 \(m=cp+d\) 故
\[\binom{n}{m} \equiv [x^m](1+x)^n \equiv [x^{cp}](1+x^p)^a \cdot [x^d](1+x)^b \equiv \binom{a}{c}\binom{b}{d} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \binom{n \bmod p}{m \bmod p} \pmod p \]\(\blacksquare\)
思考一下对于一个 \(n\) 次多项式 \(F(x)\) , \(F(x)^m \bmod p\) 咋算,先考虑计算 \([x^k]F(x)^m \bmod p\)
我们令 \(i\) 次项系数 \(f_i\) 贡献了 \(b_i\) 次,则要满足 \(\sum_{i=0}^n b_i=m,\sum_{i=0}^n ib_i=k\) ,一组 \(b_i\) 的贡献为
若是求 \([x^k]F^p(x) \bmod p\) 根据 \(\text{Lucas}\) 定理,贡献不为 \(0\) 必需有 \(\forall i \in [0,n] \cap \mathbb{N},p \mid b_i\) ,故能推出
故有 \(F(x)^p \equiv F(x^p) \pmod p\) ,进一步的 \(F(x)^m \equiv F(x^p)^aF(x)^b \pmod p\)
「LibreOJ NOI Round #2」简单算术
上面都讲完了,就是 \([x^k]F(x)^m \equiv \sum\limits_{i \equiv k \pmod p}[x^{\frac{k-i}{p}}]F(x)^a \cdot [x^i]F(x)^b \pmod p\) ,先预处理个 \(F(x)^i \quad (i \in [0,p))\)
所以每一层递推可以维护一个数组 \(g_j\) 表示上面枚举的 \(i\) , \(j=\lfloor \frac{i}{p} \rfloor\) 的系数,可以发现这个数组每层最高不超过 \(O(n)\) ,所以复杂度为 \(O(n^2p^2)-O(Tn^2 \log_p m)\)
当然,若 \(T\) 很大, \(p\) 很小的时候,可以考虑优化 \(\log_p m\) 注意到对于 \(P=p^c\) 上面的式子同样成立,这样 \(\log_p m\) 就变小了
第二类斯特林数
接下来探讨第二类斯特林数对小质数取模时的做法
我们知道(其实不太知道)第二类斯特林数第 $m$ 列的 $\text{OGF}$ 为:
$$F_m(x)=\sum_{n \ge m}\begin{Bmatrix}{n}\\{m}\end{Bmatrix}x^n=\frac{x^m}{\prod\limits_{i=1}^m(1-ix)}$$
证明:
容易知道 $F_0(x)=1$
$$F_m(x)=\sum_{n \ge m}\begin{Bmatrix}{n}\\{m}\end{Bmatrix}x^n=m\sum \begin{Bmatrix}{n-1}\\{m}\end{Bmatrix}x^n+\sum_n\begin{Bmatrix}{n-1}\\{m-1}\end{Bmatrix}x^n=m \cdot x F_m(x)+xF_{m-1}(x)$$
故
$$F_m(x)=\frac{x}{1-mx}F_{m-1}(x)=\frac{x^m}{\prod\limits_{i=1}^m(1-ix)}$$
得证
我们又知道 $\prod\limits_{i=1}^{p-1}(1-ix) \equiv (1-x^{p-1}) \pmod p$ (暴力拆开?)
令 $m=ap+b$ ,
$$\begin{Bmatrix}{n}\\{m}\end{Bmatrix}=[x^n]F_m(x) \equiv [x^{n-m}]\frac{1}{(1-x^{p-1})^a\prod\limits_{i=1}^b(1-ix)} \equiv [x^{n-m}]\frac{\prod\limits_{i=b+1}^{p-1}(1-ix)}{(1-x^{p-1})^{a+1}} \pmod p$$
$$\frac{1}{1-x^c}=\sum_{i=0}x^{ic}$$
我们同时知道
$$\frac{1}{(1-x^c)^d}=\sum_{i=0}\binom{i+d-1}{d-1} x^{ic}$$
分母处理完了,我们考虑分子:
令 $d=(p-1-b)-c$
$$[x^c]\prod_{i=b+1}^{p-1}(1-ix) \equiv [x^c]\prod_{i=1}^{p-1-b}(ix+1) \pmod p$$
$$[x^c]\prod_{i=1}^{p-1-b}(ix+1) \equiv [x^d]\prod_{i=1}^{p-1-b}(x+i) \equiv [x^d]x^{\overline{p-b}} \pmod p$$
而 $x^{\overline{c}}$ 因为质数较小,可以用前缀积求解点值
然后 $\text{IDFT}$ 一下:(记 $A_i$ 为 $\text{DFT}(x^{\overline{c}})$ 数组)
$$[x^d]x^{\overline{c}}=\frac{1}{p-1}\sum_{i=0}^N A_i g_{N}^{-id}$$
于是整合一下:
记 $c(p-1)+d=n-m$
$$\begin{Bmatrix}{n}\\{m}\end{Bmatrix} \equiv [x^c]\frac{1}{(1-x)^{a+1}} \times [x^d]\prod_{i=1}^{p-1-b}(1+ix) \equiv \binom{c+a}{a} \times [x^{(p-1-b)-d}]x^{\overline{p-b}} \pmod p$$
然后就可以 $\text{O}(p+\log_p{n})$ 求解了
第一类斯特林数
解决完麻烦的第二类斯特林数,来看看较为简单(?)的第一类斯特林数
第一类斯特林数第 $n$ 行的 OGF 为
$$F_n(x)=\sum_{i \le n}\begin{bmatrix}n\\i\end{bmatrix}x^i=x^{\overline{n}}$$
证明同第二类斯特林数,用递推式拆开即可
又因为 $x^{\overline{p}}=x\prod\limits_{i=1}^{p-1}(x+i) \equiv x(x^{p-1}-1) \equiv x^p-x \pmod p$
设 $n=ap+b$
$$x^{\overline{n}} \equiv (x^{\overline{p}})^a(x^{\overline{b}}) \equiv x^{\overline{b}}(x^p-x)^a \pmod p$$
$$(x^p-x)^a=x^a(x^{p-1}-1)^a=\sum_{i=0}(-1)^{a-i}\binom{a}{i}x^{i(p-1)+a}$$
$$\begin{bmatrix}n\\m\end{bmatrix}=[x^m]F_n(x) \equiv [x^m]x^{\overline{b}}(x^p-x)^a \pmod p$$
如果 $m < a$ ,则 $\begin{bmatrix}n\\m\end{bmatrix} \equiv 0 \pmod p$
否则设 $c(p-1)+d=m-a$ ,若 $d=0,b>0$ , $c \leftarrow c-1,d \leftarrow p-1$
$$\begin{bmatrix}n\\m\end{bmatrix}=(-1)^{a-c}\binom{a}{c}[x^d]x^{\overline{b}}$$
P.S. 当要求 $x^{\overline{p-1}}$ 时咋搞?此时次数是 $p-1$ 次,貌似用不了原根了
我会因式分解!
$$x^{\overline{p-1}} \equiv \frac{x^{\overline{p}}}{x-1} \equiv \frac{x(x^{p-1}-1)}{x-1} \equiv \sum_{i=1}^{p-1}x^i \pmod p$$
生成函数的组合意义
来探讨一下某个类似 $\text{exp}$ 的生成函数的组合意义(下面的 $F$ 是个 $\text{EGF}$):
$$n![x^n]e^{F(x)}=n![x^n]\sum_{k=0}\frac{F^k(x)}{k!}=n!\sum_{k=0}\frac{1}{k!}\prod_{\sum\limits_{i=1}^ka_i=n}\frac{f_{a_i}}{a_i!}$$
故
$$n![x^n]e^{F(x)}=\sum_{k=0}\frac{1}{k!}\sum_{\sum\limits_{i=1}^ka_i=n}\binom{n}{a_1,a_2,..,a_k}\prod f_{a_i}$$
所以 $n![x^n]e^{\hat{F}(x)}$ 的组合意义为将 $n$ 种不同元素划分为任意个无标号集合,每个集合作该种计数(该种计数一般要求只和集合大小有关,也就是 $f_i$ )的方案数
所以我们如果得到了对于一个集合的生成函数 $F(x)$ ,求划分以后方案数就等价于求 $n![x^n]e^{\hat{F}(x)}$ ,具体题目具体求解,注意子集 $\text{exp}$ 不需要管这么多,因为已经定下了选择的哪个集合
Distinct Multiples
题意就是给你一个长度为 $n$ 的序列 $D$ 和限制 $M$ ,要你求长度为 $n$ 的满足以下限制的 $A$:
$$\forall i\not=j,A_i \not= A_j$$
$$\forall i,D_i \mid A_i$$
先试图容斥掉恰好相等条件,但是枚举子集你发现怎么写 $(-1)^c$ 的 $c$ 都有问题,发现是因为这个 $c$ 不跟点数有关,把这个转变成连边,若 $A_i=A_j,i\not=j$ 则 $i,j$ 连边。相当于是求没有边的图的方案数,显然可以子集反演
记 $f_S$ 为钦定了 $S$ 中的边必选的方案数,但是 $S$ 集合太大,我们可以变为 $f_S$ 是钦定 $S$ 中的点都至少有一条边,也就可以变为枚举算出每个联通块的贡献
如果确定了一个联通块 $S$ ,那么它们 $A$ 的取值是好算的,主要是容斥系数
$\sum\limits_{T \sub E_S} (-1)^{|T|}$ 难顶,不过这个东西显然只跟 $|S|$ 有关,我们记 $h_i$ 为联通块大小为 $i$ 的容斥系数之和
显然有 $h_1=1$ ,当 $i \ge 2$ 时,如果 $n$ 在同一个连通块里连了两条边以上,那么可以找到编号最小两个与 $n$ 点连边的并把这两个点之间的边反转一下状态,就能进行抵消,同样,若连通块个数大于 $1$ 也能抵消,所以就相当于在 $1,2,...,n-1$ 这个连通块中选一个点连,故 $h_n=-(n-1)h_{n-1}$
每个连通块的算出来了,然后子集 $\text{exp}$ 即可
概率密度函数与生成函数
这种东东感觉只在排列偏序上见到过,具体就是排列转化为随机 $[0,1]$ 变量,然后积分算概率密度函数
这个类型最经典的就是新年的军队,概率密度函数的运用在这场题解里 $\text{EI}$ 已经写的很详细了
然而笔者自己并没有这个实力做出来,只能给几道比较在自己能力范围的题目
欧拉积分
其实就是两个函数, \(\Gamma(s)\) 和 \(\Beta(p,q)\)
所以当 \(s\in \mathbb{N}\) 时, \(\Gamma(s+1)=s!\)
所以当 \(p,q\in \mathbb{N}\) 时, \(\Beta(p+1,q+1)=\frac{p!q!}{(p+q+1)!}\)
Random Kth Max
题意就是 \(n\) 个变量,第 \(i\) 个在 \([L_i,R_i]\) 之间随机生成,问期望第 \(K\) 大是多少
我们假设 \(x\) 的概率密度函数(即 \(\text{pdf}\) )为 \(f(x)\) ,那么
然后有累计分布函数(即 \(\text{CDF}\) ) \(F(x)=P(X \le x)= \int_{-\infty}^{x}f(x)\mathrm{d}x\) ,如果 \(X\) 在 \([a,b]\) 中随机生成,则
为啥?首先我们知道整数概率公式
又因为 \(f(x)=F'(x)\) (定义),故有
根据分部积分法 \(\int_a^b f(x)g'(x) \mathrm{d} x=f(x)g(x)|_a^b-\int_a^b f'(x)g(x) \mathrm{d} x\) ,故
由于 \(X\) 在 \([a,b]\) 中随机生成,故 \(F(a)=0,F(b)=1\) ,那么进一步的
其实前面那个式子也挺优美,但是为了和整数概率公式一致,我们还是用最后这个吧
我们来试试算 \(n\) 个 \([0,1]\) 随机变量的第 \(m\) 小,我们令其为 \(X\) ,设 \(\overline{F}(x)=1-F(x)=P(X \ge x)\) (貌似叫 \(\text{CCDF}\) ),那么可以得到
根据上面那个公式,有
积分的部分不就是 \(\Beta(i+1,n-i+1)\) ?所以
终于能算全部在 \([0,1]\) 区间随机分布的第 \(m\) 小了(也就可以算第 \(m\) 大),在 \([L_i,R_i]\) 随机分布怎么算?由于 \(L_i,R_i \le 100\) ,我们直接枚举第 \(m\) 大在 \([x,x+1]\) 之间,跑一个 \(\text{DP}\) ,记 \(f_{i,j,k}\) 为前 \(i+j+k\) 个变量,有 \(i\) 个小于 \(x\) ,有 \(j\) 个在 \([x,x+1]\) ,有 \(k\) 个大于 \(x+1\) ,然后转移和计算答案都是简单的
当然,貌似可以用二元多项式做(可能推推式子就一元了),因为没这样做,所以复杂度不知道
所以有时连续的可以先考虑 \([x,x+1]\) 的答案怎么计算,把连续化为离散,时间复杂度 \(O(n^3|V|)\)
「2020-2021 集训队作业」Permutation
\(\text{I}\color{red}{\text{tst}}\) 的题/se/bx
然而棋盘多项式的论文还没学!什么摆圣!只能先假装会棋盘多项式了
\(\exist\) 显然难,考虑容斥为 \(\forall\) ,显然有(写 \([1,n]\cap \mathbb{N}\) 显得式子太长了就不这样写了)
可以发现前面两个都是错排数 \(D_n\) ,它的递推式众所周知,我们来思考如何求 \(g_n=\sum\limits_{p \text{ is a permutation of length } n}[\forall i \in [1,n],p_i\not=i \land p_i\not=n-i+1]\) ,仍然考虑容斥,令 \(h_{n,i}\) 为钦定有 \(i\) 个位置满足 \(p_i=i \lor p_i=n-i+1\) 条件的方案数,有
\(h_i\) 怎么计算?考虑使用棋盘多项式,学习笔记在这里(哈哈,还在咕),可以发现这个棋盘的每一行 \(i\) 都顶多两列,且实际上这两列能取到的行就是 \(i,n-i+1\) ,这样就可以用分离定理,有 \(h_i\) 的生成函数为
故有
先把 \((-1)^i\) 搞进去,也就是让 \(x\) 都变为 \(-x\) ,然后翻转一下系数,把 \((n-i)!\) 变为 \(i!\)
欧拉积分?欧拉积分!但不要着急,我们先给出另一种做法,也就是官方题解中的做法
令 \(E(F(x))=\sum_{i=0}^n i![x^i]F(x)\) ,故 \(g_n=E((x^2-4x+2)^{\lfloor \frac{n}{2} \rfloor}(x-1)^{n \bmod 2})\)
观察 \(E(F(x))\) 的性质,显然有 \(E(F(x)+G(x))=E(F(x))+E(G(x))\) ,然后思考 \(i!\) 与求导系数之间的相似性,可以发现 \(E(F(x))=E(F'(x))+[x^0]F(x)\) ,那么我们直接将原式子分奇偶算一下就可以得到递推式,相当的高妙
不过我们还是得回头来讲讲欧拉积分的做法,偶数显然简单一些,这里就只推奇数了:
注意第三步到第四步是用的分部积分,貌似大部分用 \(\Gamma(s)\) 的都是分部积分然后寻找递推式,然后可以发现第六步有点像在凑?其实若 \(F(x)\) 更为简单一些可以直接套上多项式取模获得递推式
先咕咕咕一下,马上更新~
\(\text{q-analog}\) 相关
可作为餐前甜点(如果有密码就是 EI is our red sun!
)
\(\text{q-analog}\) 的学习笔记点这
拉格朗日反演
拉格朗日隐函数定理
先来个拉格朗日隐函数定理( \(\text{Lagrange Implicit Function Theorem}\) ),更严谨的可以看看这里(话说换个形式就是拉格朗日反演?)
这个 \(\text{LIFT}\) 定理最主要的就是 \(f(x)=x \cdot g(f(x)) ([x^0]f(x)=0)\) ,有唯一解,且
来求个那罗延数( \(\text{Narayana Numbers}\) ),记 \(N(n,k)\) 为 \(n\) 对括号组成的括号序列有 \(k\) 对括号相邻的方案数,也等价于 \(n+1\) 个点无标号有序(儿子之间)有根树有 \(k\) 个叶子的方案数,还等价于 \(n\) 个点无标号有根二叉树的右儿子(根算一个右儿子)个数为 \(k\) 的方案数
令其生成函数为 \(G(z,t)=\sum N(n,k)z^{n+1}t^k\) ,我们考虑用其第二个组合意义进行转移,也就是枚举根的一堆子树,那么有
根据 \(\text{LIFT}\) 定理,有
故
通过 \(\text{LIFT}\) 定理,我们来回顾一下学习递推时一个最经典的序列:斐波那契序列
在这里我们定义 \(f_0=0,f_1=f_2=1\) ,记其 \(\text{EGF}\) 为 \(F(x)\) ,有
用一用我们刚学的定理!可得
很诡异?有 \(x\) 那就代回去!把系数写入 \(F(x)\) ,有
我们再对这个式子求 \(n\) 次项系数,可以推出
拉格朗日反演
前置知识和符号在这里
上面这篇讲到了 \(\text{LIFT}\) 定理对最原始版拉格朗日反演推导的用处(然而对进阶的版本可能就不太好用了),我们直接进化到最终版
拉格朗日反演
若 \(F(x) \in R[x]_{+}\) 且 \(G(F(x))=H(x)\) ,则
\[[x^n]A(G(x))=n^{-1}[x^{-1}]A(H(x))'F^{-n}(x) \]
我们已经扩了域,将形式幂级数环拓展到了形式洛朗级数环
但是注意到对于任意 \(F(x) \in R((x))\) , \([x^{-1}]F'(x)=0\) ,这是显然的,所以我们有引理
\(\text{Lemma.}\)
对于 \(F(x) \in R[x]_{+}\) 有,
\[[x^{-1}]F'(x)F^{k}(x)=[k=-1] \]
证明比较简单, \(k \not= -1\) 的时候有 \(F'(x)F^{k}(x)=\Big(\frac{F^{k+1}(x)}{k+1}\Big)\) ,而 \(k=-1\) 的时候即为 \(\frac{F'(x)}{F(x)}\) ,又因为 \(F(x) \in R[x]_{+}\) ,即 \(F(0)=0\) ,则有 \([x^{-1}]\frac{F'(x)}{F(x)}=\frac{[x^0]F'(x)}{[x^1]F(x)}=1\)
有了这个就可以证明了,懒得写了,建议参考 \(\text{EI}\) 的证明,把 \(G^k(F(x))\) 替换成 \(A(G(F(X)))\) 也是一样的
生成函数的各式递推方法
其一
如果已知 \(m\) 次生成函数 \(G(x)\) ,要计算 \(F(x)=G(x)^k\) 的前 \(n\) 次,可以 \(O(nm)\) 的递推
我们对 \(F(x)=G(x)^k\) 求导可得 \(F'(x)=kG(x)^{k-1}G'(x)\) ,两边同乘 \(G(x)\) ,有
同时取两边 \(n\) 次项系数可以得到递推式
来点例子,不过卡特兰数比较 \(\text{low}\) ,我们直接来个施罗德数!它的递推式是
这个数可以是什么呢?贴一贴鸡老师写的博客,其生成函数显然有
为什么求根公式为啥是取负号可以参考卡特兰数
显然只要会求 \(\sqrt{x^2-6x+1}\) 就可以了,所以我们设 \(G(x)=x^2-6x+1\) ,要求 \(F(x)=G(x)^{\frac{1}{2}}\) ,注意此 \(F(x)\) 非彼 \(F(x)\)
那么有 \(F'(x)G(x)=\frac{1}{2}F(x)G'(x)\) ,取一下 \(n\) 次项系数,可以有 \((n-1)f_{n-1}-6nf_n+(n+1)f_{n+1}=f_{n-1}-3f_n\) ,整理一下有
代回去搞搞即可
其二
递推式子是 \(f_i=\sum_{i=0}i![x^i]G(x)\) 的,可以欧拉积分推导,例子已经在欧拉积分部分写了,这里不多赘述
其三
拉格朗日反演,不多赘述
其四
式子是 \(\text{exp}\) 之类的可以考虑求偏导
更简单的排列计数
注意到一个置换环的 \(\text{EGF}\) 为 \(G(x)=\sum\limits_{i=1}^{\infty} \frac{x^i}{i}\)
所以除掉自环后组成的排列就是 \(e^{G(x)-x}\) ,然而这不能够玩多项式,所以我们套路地转化一下,下面 \(c\) 是一个排列的置换环的个数
所以相当于对于 \(i \in [0,K] \cap \mathbb{N}\) ,求出 \(f_{n,i}=\sum \binom{s}{i}\) ,那么显然我们在刚才那个改写一下式子,可以得到
组合意义理解一下,就是一个置换环可贡献可不贡献
然而接着怎么做?
我会求偏导!令 \(F=e^{(G(x)-x)(y+1)}\) ,对 \(x\) 求偏导,可得
两边取 \(x^{n-1}y^m\) 项系数,有
直接前缀和优化即可
集合幂级数
写这个的原因一是 \(\text{APIO2022}\) ,其次是联考考了个强推 \(\text{FWT}\) (就是卡农),某个人不敢推,然而式子其实极其简单,写下此节,铭记于心
咕咕咕~