组合数
1.杨辉三角
分两种情况:
- 在前 \(n-1\) 个中已经选出 \(m\) 个;
- 在前 \(n-1\) 个中选出 \(m-1\) 个,加上刚刚选的第 \(m\) 个。
可用于 \(O(n^2)\) 预处理组合数。
2.组合恒等式
i.吸收恒等式
- Proof:
同理可得:
ii.对称恒等式
组合意义:\(n\) 选 \(m\),相当于 \(n\) 个中不选 \(n-m\) 个。
iii.上指标求和1
- Proof\[\begin{aligned}\sum_{i=0}^n \binom{m+i}{m} &= \binom{m}{m} +\binom{m+1}{m} + \dots + \binom{m+n}{m} \\&= \binom{m+1}{m+1} + \binom{m+1}{m} + \binom{m+2}{m} + \dots + \binom{m+n}{m}\\ &= \binom{m+2}{m+1} + \binom{m+2}{m} + \dots + \binom{m+n}{m} \\&= \binom{m+3}{m+1} + \binom{m+3}{m} + \dots + \binom{m+n}{m} \\&= \binom{m+n+1}{m+1}\end{aligned} \]
iv.上指标求和2
组合意义:考虑 \(n+1\) 个物品中选 \(k+1\) 个,若最后一个选出的物品是第 \(i\) 个,那么前面选择方案有 \(\binom{i-1}{k}\) 种。
v.对角线求和
利用对称恒等式转化为上指标求和 1。
vi.组合数前缀和
设 \(S_{n,m}=\sum_{i=0}^{m} \binom{n}{i}\)。有递推:
vii.范德蒙德卷积
从 \(A\) 集合选出 \(x\) 个,从 \(B\) 集合选出 \(y\) 个,当 \(x+y\) 为定值时可套用。
若 \(x-y\) 为定值,转化为在 \(B\) 集合中不选 \(m-y\) 个,那么 \(x+m-y\) 为定值,得到 \(\binom{n+m}{x+m-y}\)。
viii.格路计数
从 \((0,0)\) 向下、向右走到 \((n,m)\) 的方案数为 \(\binom{n+m}{n}\)。
组合意义:总共要走 \(n+m\) 格, \(n\) 格向下,\(n-m\) 格向右。在 \(n-m\) 步中选择 \(n\) 步向下走。
3.二项式定理
Theorem
Proof:将原式全部拆开,对于 \(a^ib^{n-i}\) 项,在拆开后的式子中出现了 \(\binom{n}{i}\) 次。
i.下指标求和
组合意义:设 \(S={1,2,3,...,n}\),\(S_i\) 为 \(S\) 大小为 \(i\) 的子集的集合。所有 $S_i $ 的并集是 \(S\),且两两不交。
代数意义:二项式定理。
ii.交错和
代数意义:原式化为 \((1-1)^n\)。
4.卢卡斯定理(Lucas)
Theorem
其中 \(p\) 为质数。
也就是把 \(n,m\) 表示为 \(p\) 进制数,对于每一位都分别求解再相乘。
适用于 \(n,m\) 都很大,但 \(p\) 较小时的情况。
Proof
-
引理:若 \(p\) 为质数,则 \((1+x)^p \equiv 1+x^p \pmod{p}\)。
Proof:
- 将 \((1+x)^p\) 利用二项式定理展开,得 \((1+x)^p = \sum\limits_{i=0}^p \binom{p}{i}x^i\)。
- 利用吸收恒等式变形: \(\sum\limits_{i=0}^p \binom{p}{i}x^i = 1+\sum\limits_{i=1}^p \dfrac{p}{i}\binom{p-1}{i-1}x^i\)。
- 对于 \(\forall i \in [1,p)\),\(\dfrac{p}{i}\binom{p-1}{i-1} \mid p\),则有 \((1+x)^p \equiv 1+x^p \pmod{p}\)。命题得证。
-
设 \(n=sp+q,m=tp+r\)。问题转化为证明 \(\binom{n}{m} \equiv \binom{s}{t} \times \binom{q}{r} \pmod{p}\)。
\(\binom{n}{m}\) 即为 \((1+x)^n\) 中 \(x^m\) 项的系数。
\[\begin{aligned}(1+x)^n &\equiv (1+x)^{sp+q} &\pmod{p}\\&\equiv (1+x)^{sp} \times (1+x)^q &\pmod{p}\\&\equiv [(1+x)^p]^s \times (1+x)^q &\pmod{p}\\&\equiv (1+x^p)^s \times (1+x)^q &\pmod{p}\\&\equiv (\sum\limits_{i=0}^s\binom{s}{i}x^{ip})(\sum\limits_{i=0}^q\binom{q}{i}x^i) &\pmod{p}\end{aligned} \]由于 \(x^m = x^{tp+r} = x^{tp}\times x^r\),\(x ^ m\) 的系数也可表示为 \(\binom{s}{t} \times \binom{q}{r}\)。
则有 \(\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \times \binom{n \bmod p}{m \bmod p} \pmod{p}\),命题得证。
利用 Lucas 定理,可以在 \(O(p)\) 处理阶乘数组与阶乘逆元数组后, \(O(\log_p n)\) 求出 \(\binom{n}{m} \bmod p\) 的值。
void Init(){
fac[0]=caf[0]=1;
for(int i=1;i<p;i++) fac[i]=fac[i-1]*i%p;
caf[p-1]=QuickPow(fac[p-1],p-2);
for(int i=p-2;i;i--) caf[i]=caf[i+1]*(i+1)%p;
}
ll C(int x,int y){
if(x<y) return 0;
return fac[x]*caf[y]%p*caf[x-y]%p;
}
ll Lucas(int x,int y){
if(x<p&&y<p) return C(x,y);
else return Lucas(x/p,y/p)*C(x%p,y%p)%p;
}
5.阶乘的素数幂次
设 \(p \in \mathbb{Prime}\),则有:
其中 \(v_p(x)\) 表示 \(x\) 中包含 \(p\) 的次数。
将 \(1\sim n\) 分开,\(v_p(n!)=\sum_{i=1}^n v_p(i)\)。
\(1\sim n\) 中至少包含一个 \(p\) 的数字有 \(\lfloor \dfrac{n}{p} \rfloor\),统计进答案中。\(1 \sim n\) 中至少包含 \(2\) 个 \(p\) 的数字有 \(\lfloor \dfrac{n}{p^2} \rfloor\) 个,但由于已经有一个 \(p\) 被统计过一遍,所以只需要再统计第 \(2\) 个质因子,答案加上 \(\lfloor\dfrac{n}{p^2}\rfloor\),系数为 \(1\)。
我们从另一个角度来计算。用 \(p\) 进制表示 \(n\),则有 \(n=\sum a_ip^i(0\leq a_i<p)\)。
其中 \(s_p(n)\) 表示 \(n\) 在 \(p\) 进制下各数位的数字之和。
6.Kummer 定理
在 \(p\) 进制下 \(n-m\) 与 \(m\) 相加,结果为 \(n\)。
设进位次数为 \(c\)。每进位一次,数位之和就会减少 \(p-1\),那么有
于是得到 \(\binom{n}{m}\) 中 \(p\) 的次数,就是 \(n-m\) 与 \(m\) 在 \(p\) 进制下相加进位次数。
同理可得, \(\binom{n}{m}\) 中 \(p\) 的次数就是 $n $ 与 \(m\) 在 \(p\) 进制下相减的借位次数。
若 \(\binom{n}{m}\) 在模 \(p\) 意义下为 \(0\),那么 \(n,m\) 在 \(p\) 进制下相减时至少产生了一次借位。
换句话说,如果在 \(p\) 进制下存在一位,使得 \(n\) 在这一位的值小于 \(m\) 在这一位的值,那么 \(\binom{n}{m} \bmod p\) 一定为 \(0\)。
由此可以快速判断 \(\binom{n}{m}\) 的奇偶性:设 \(n,m\) 在二进制下表示的集合为 \(S_n,S_m\),\(\binom{n}{m}\) 为奇数当且仅当 \(S_m \subseteq S_n\),也就是 \(n \operatorname{and} m = m\)。
7.卡特兰数
对于一个长度为 \(2n\) 的 01 序列 \(A\),含有 \(n\) 个 \(0\) 和 \(n\) 个 \(1\),满足对于任意的 \(i \in [1,2n]\),\(A[1\sim i]\) 中 \(1\) 的个数不超过 \(0\) 的个数。
这样的 \(A\) 的个数,我们记为 \(Cat_n\),也就是卡特兰数的第 \(n\) 项。
求法 1
欲求出 \(Cat_n\) 的值,不妨利用容斥,用总方案数 \(\binom{2n}{n}\) 减去不合法的方案数。
对于一个不合法的数列 \(B\),存在一个位置 \(2p+1\),满足 \(B[1\sim i]\) 中 \(0,1\) 分别出现了 \(p,p+1\) 次。那么 \(B[2p+2\sim 2n]\) 中 \(0,1\) 分别出现了 \(n-p,n-p-1\) 次。
反转 \(B[2p+2\sim 2n]\) 的每个元素,\(0\) 变 \(1\),\(1\) 变 \(0\)。那么我们得到了一个含有 \(n+1\) 个 \(1\),\(n-1\) 个 \(0\) 的数列。
对于一个含有 \(n+1\) 个 \(1\),\(n-1\) 个 \(0\) 的数列 \(C\),也存在一个这样的 \(2p+1\)。反转 \(C[2p+2\sim 2n]\),又得到了一个含有 \(n\) 个 \(0\) 和 \(n\) 个 \(1\) 的数列。
每一个 \(B\) 都能得到一个唯一的 \(C\),反过来亦然。那么不合法的方案数就是 \(C\) 的个数,即 \(\binom{2n}{n+1}\)。
于是我们得到:
求法 2
\(Cat_n\) 也可以表述为:在平面直角坐标系中,每次允许向 \(x\) 或 \(y\) 的正方向移动一格,从 \((0,0)\) 不超过 \(y=x\) 这条直线走到 \((n,n)\) 的方案数。
那么如果我们移动过程中触碰到了 \(y=x+1\) 这条直线,必定不合法。
考虑类似于 "反射" 的转化:如果触碰到了 \(y=x+1\),那么移动 \(x\) 变为移动 \(y\),移动 \(y\) 变为移动 \(x\)。最终我们会到达 \((n,n)\) 关于 \(y=x+1\) 的对称点 \((n-1,n+1)\)。
图中黑色折线为原路径,黄色折线为 “反射” 得到的直线。
那么不合法的走法有 \(\binom{2n}{n+1}\) 种,也可以得到与求法 1 相同的表达式。
卡特兰数的应用
- 长度为 \(2n\) 的括号序列个数为 \(Cat_n\);
- \(n\) 个元素按顺序进栈,出栈序列的个数为 \(Cat_n\);
- \(n\) 个节点能够构造出 $Cat_n $ 种不同的二叉树。
- ...
卡特兰数还有递推形式:
卡特兰数的前 \(10\) 项 (从 \(0\) 开始):