组合基础与卢卡斯定理

创建时间:2025-08-05


计数原理与排列组合的概念

在遇到复杂计数问题时,通常会将其分为若干相互独立的子问题求解,或者将子问题有分解为子问题,将结果按某种计数方式结合起来,得到最终答案。若子问题是完成原问题的若干种方式,那么最终答案为子问题答案的和,称之为分类加法计数原理,简称加法原理;若子问题是完成原问题的若干个步骤,那么最终答案为子问题答案的积,称之为分步乘法计数原理,简称乘法原理

\(\Pi_{i=1}^n=n!\),即 \(n\) 的阶乘,或者 \(1\)\(n\) 的全排列。

排列(Permutation)的概念:对于形如“从 \(n\) 个元素中选 \(m\) 个出来按顺序排成一排”的问题,将方案总数称为排列数,记作 \(P_n^m\)\(A_n^n\)\(n \ge m\))。

很容易发现,第一个数有 \(n\) 种选法,第二个数有 \(n-1\) 种选法,第三个数有 \(n-3\) 种选法,第 \(i\) 个数有 \(n-i+1\) 种选法。由乘法原理知总方案数为 \(n(n-1)(n-2) \cdots (n-m+1)\),故有了排列公式

\[P_n^m=n(n-1)(n-2) \cdots (n-m+1)=\frac {n!} {(n-m)!} \]

组合(Combination)的概念:对于形如“从 \(n\) 个元素种选出 \(m\) 个”的问题,将方案总数称为组合数,记作 \(C_n^m\)\(n \ge m\))。

如果用排列数 \(P_n^m\) 算这种问题,显然是会算重的,因为排列数与顺序有关,组合数与顺序无关。由于每种选法都会产生 \(P_m^m\),所以实际上只有 \(\frac {P_n^m} {P_m^m}\) 种选法,即 \(\frac {n(n-1)(n-2)\cdots(n-m+1)} {m(m-1)(m-2)\cdots 1}\)。故有了组合公式

\[C_n^m=\frac {n(n-1)(n-2)\cdots(n-m+1)} {m(m-1)(m-2)\cdots 1}=\frac {n!} {m!(n-m)!} \]

排列数与组合数有关的常用结论

  1. \(P_n^1=n,P_n^n=n!\)
  2. \(C_n^0=1,C_n^1=C_n^n=n\)
  3. \(C_n^m=C_{n-1}^m+C_{n-1}^{m-1}\)
  4. \(C_n^0x^n+C_n^1x^{n-1}y+C_n^2x^{n-2}y^2+\cdots+C_n^{n-1}x^{n-1}+C_n^ny^n=\sum_{i=0}^nC_n^ix^{n-i}y^i=(x+y)^n\)(二项式定理)
  5. \(C_n^0+C_n^1+C_n^2+\cdots+C_n^{n-1}+C_n^n=\sum_{i=0}^nC_n^i=2^n\)(二项式定理)

卢卡斯定理及其应用场景

卢卡斯定理(Lucas's theorem):

对于正整数 \(n,m\) 和质数 \(p\),有 \(C_n^m \equiv C_{n \bmod p}^{m\bmod p}C_{\lfloor \frac n p \rfloor}^{\lfloor \frac m p \rfloor} \pmod p\)

卢卡斯定理的实现:

inline int Lucas(int n, int m) {
	if (m == 0) return 1;
	return 1ll * C(n % MOD, m % MOD) * Lucas(n / MOD, m / MOD) % MOD;
}

\(n\)\(m\) 每向下递归一层都会除以一次 \(p\),故卢卡斯定理的时间复杂度是 \(O(\log_p n)\) 的。

应用1:当题目给定的模数不大,但组合数 \(C_n^m\)\(n,m\) 很大时,显然不能按照直接通过组合公式计算组合数,这是可以应用卢卡斯定理,预处理较小的组合数/阶乘/逆元。

应用2:当题目给定的模数很小,以至于 \(p<n,m\),此时的计算过程中可能遇到不存在逆元的情况,组合公式计算显然行不通,此时只能使用卢卡斯定理将计算的组合数范围缩小至 \(p\) 以下,这时便不可能出现不存在逆元的情况(除非 \(p\) 不是质数),可以直接用组合公式计算了。

应用3:注意到之前卢卡斯定理都是以递归的形式写出的。将 \(n\)\(m\) 写成 \(p\) 进制形式:\(n=(a_ta_{t-1}a_{t-2}\cdots a_0)_p,m=(b_tb_{t-1}b_{t-2}\cdots b_0)_p\),则 \(C_n^m \equiv C_{a_t}^{b_t}C_{a_{t-1}}^{b_{t-1}}C_{a_{t-2}}^{b_{t-2}}\cdots C_{a_0}^{b_0} \pmod p\)。在这种形式下,通常可以与进制形成关联。例如令 \(p=2\),当且仅当 \(a<b(a,b<2)\)\(C_a^b=0\),可以利用这个性质快速判断 \(C_n^m\) 的奇偶性,即当且仅当 \(n\&m=m\)\(C_n^m\) 是奇数,否则是偶数。

posted @ 2026-06-02 16:16  xubaichuan  阅读(17)  评论(0)    收藏  举报