由于博主数学水平有限,以下的一些证明可能不是很准确,还望读者指出。
定义
从 n n n 个不同元素中取出 m m m 个组成一个集合(不考虑顺序),产生的不同集合数量就是组合数,记作 C n m C_n^m Cnm。
一些性质
- 通式: C n m = n ! m ! ( n − m ) ! C_n^m=\frac{n!}{m!(n-m)!} Cnm=m!(n−m)!n!
我们从 n n n 个元素中取 m m m 个,那么第 1 1 1 个有 n n n 种选法,第 2 2 2 个有 ( n − 1 ) (n-1) (n−1) 种选法,以此类推,第 k ( k ∈ [ 1 , m ] ) k(k\in[\;1,m\;]) k(k∈[1,m]) 个有 ( n − k + 1 ) (n-k+1) (n−k+1) 种选法,故应是 ∏ i = 1 m ( n − i + 1 ) = n ! ( n − m ) ! \prod \limits _{i=1}^m(n-i+1)=\frac{n!}{(n-m)!} i=1∏m(n−i+1)=(n−m)!n!。
但是由于不考虑顺序,而最后选出的每一种方案都对应着 m ! m! m! 种顺序(因为有 m m m 个),所以还要除以 m ! m! m!,即最后的表达式为 n ! m ! ( n − m ) ! \frac{n!}{m!(n-m)!} m!(n−m)!n!。
- C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnn−m
我们每次从 n n n 个元素中取出 m m m 个,那么剩下的 ( n − m ) (n-m) (n−m) 个元素也组成一个集合,这两个集合一一对应,所以从 n n n 个中取 m m m 个和取 ( n − m ) (n-m) (n−m) 个的方案数是一样的。
其实也可以用通式来说明啦。
- C n m = C n − 1 m + C n − 1 m − 1 C_{n}^m=C_{n-1}^m+C_{n-1}^{m-1} Cnm=Cn−1m+Cn−1m−1
考虑是否取第 n n n 个元素。若取第 n n n 个元素,那我们就要从剩下的 ( n − 1 ) (n-1) (n−1) 个元素中选出 ( m − 1 ) (m-1) (m−1) 个来,即 C n − 1 m − 1 C_{n-1}^{m-1} Cn−1m−1。同理,若不取第 n n n 个元素,那我们就要从剩下的 ( n − 1 ) (n-1) (n−1) 个元素中选出 m m m 个来,即 C n − 1 m C_{n-1}^m Cn−1m。加起来就是 C n m C_n^m Cnm。
这个公式可以让我们在 n 2 n^2 n2 的时间内预处理出组合数(就是杨辉三角)。
- ∑ i = 0 n C n i = 2 n \sum\limits_{i=0}^nC_n^i=2^n i=0∑nCni=2n(即 C n 0 + C n 1 + C n 2 + ⋯ + C n n = 2 n C_n^0+C_n^1+C_n^2+\cdots+C_n^n=2^n Cn0+Cn1+Cn2+⋯+Cnn=2n)
每个元素都有 2 2 2 种取法(要么取,要么不取),所以总方案数是 2 n 2^n 2n。
而 ∑ i = 0 n C n i \sum\limits_{i=0}^nC_n^i i=0∑nCni 代表的就是总方案数,那就是 2 n 2^n 2n,故原式得证。
- ∑ i = m n C i m = C n + 1 m + 1 \sum\limits_{i=m}^{n}C_{i}^m=C_{n+1}^{m+1} i=m∑nCim=Cn+1m+1(即 C m m + C m + 1 m + ⋯ + C n m = C n + 1 m + 1 C_m^m+C_{m+1}^m+\cdots+C_{n}^m=C_{n+1}^{m+1} Cmm+Cm+1m+⋯+Cnm=Cn+1m+1)
由于 C m m = C m + 1 m + 1 = 1 C_m^m=C_{m+1}^{m+1}=1 Cmm=Cm+1m+1=1,那前两项就可以化为 C m + 1 m + 1 + C m + 1 m C_{m+1}^{m+1}+C_{m+1}^m Cm+1m+1+Cm+1m。
然后通过性质 3 3 3 可知 C m + 1 m + 1 + C m + 1 m = C m + 2 m + 1 C_{m+1}^{m+1}+C_{m+1}^m=C_{m+2}^{m+1} Cm+1m+1+Cm+1m=Cm+2m+1,然后与第 3 3 3 项 C m + 2 m C_{m+2}^m Cm+2m 合并可得 C m + 3 m + 1 C_{m+3}^{m+1} Cm+3m+1,依此类推。
那最后一一合并下来就是 C n + 1 m + 1 C_{n+1}^{m+1} Cn+1m+1。
这个公式的推论: ∑ i = l r C i m = C r + 1 m + 1 − C l m + 1 \sum\limits_{i=l}^rC_{i}^m=C_{r+1}^{m+1}-C_{l}^{m+1} i=l∑rCim=Cr+1m+1−Clm+1
运用前缀和的思想, ∑ i = m l − 1 C i m = C l m + 1 \sum\limits_{i=m}^{l-1}C_{i}^m=C_l^{m+1} i=m∑l−1Cim=Clm+1, ∑ i = m r C i m = C r + 1 m + 1 \sum\limits_{i=m}^rC_{i}^m=C_{r+1}^{m+1} i=m∑rCim=Cr+1m+1。
所以 ∑ i = l r C i m = ∑ i = m r C i m − ∑ i = m l − 1 C i m = C r + 1 m + 1 − C l m + 1 \sum\limits_{i=l}^rC_{i}^m=\sum\limits_{i=m}^rC_{i}^m-\sum\limits_{i=m}^{l-1}C_{i}^m=C_{r+1}^{m+1}-C_{l}^{m+1} i=l∑rCim=i=m∑rCim−i=m∑l−1Cim=Cr+1m+1−Clm+1。
那么运用这个公式可以求出 “ “ “一段 ” ” ”组合数之和。
- 二项式定理: ( a + b ) n = ∑ i = 0 n C n i a i b n − i (a+b)^n=\sum\limits_{i=0}^nC_{n}^ia^ib^{n-i} (a+b)n=i=0∑nCniaibn−i
用数学归纳法证明。当 n = 1 n=1 n=1 时, ( a + b ) 1 = C 1 0 a 0 b 1 + C 1 1 a 1 b 0 = a + b (a+b)^1=C_1^0a^0b^1+C_1^1a^1b^0=a+b (a+b)1=C10a0b1+C11a1b0=a+b 成立。
现在假设当 n = m n=m n=m 时该定理成立,那么当 n = m + 1 n=m+1 n=m+1 时:
( a + b ) m + 1 = ( a + b ) ( a + b ) m (a+b)^{m+1}=(a+b)(a+b)^m (a+b)m+1=(a+b)(a+b)m
= ( a + b ) ∑ i = 0 m C m i a i b m − i \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=(a+b)\sum\limits_{i=0}^mC_{m}^ia^ib^{m-i} =(a+b)i=0∑mCmiaibm−i
= ∑ i = 0 m C m i a i + 1 b m − i + ∑ i = 0 m C m i a i b m − i + 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=0}^mC_{m}^ia^{i+1}b^{m-i}+\sum\limits_{i=0}^mC_{m}^ia^{i}b^{m-i+1} =i=0∑mCmiai+1bm−i+i=0∑mCmiaibm−i+1
= ∑ i = 1 m + 1 C m i − 1 a i b m − i + 1 + ∑ i = 0 m C m i a i b m − i + 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=1}^{m+1}C_{m}^{i-1}a^{i}b^{m-i+1}+\sum\limits_{i=0}^mC_{m}^ia^{i}b^{m-i+1} =i=1∑m+1Cmi−1aibm−i+1+i=0∑mCmiaibm−i+1
= ∑ i = 0 m + 1 ( C m i − 1 + C m i ) a i b m − i + 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=0}^{m+1}(C_{m}^{i-1}+C_m^i)a^{i}b^{m-i+1} =i=0∑m+1(Cmi−1+Cmi)aibm−i+1
= ∑ i = 0 m + 1 C m + 1 i a i b m + 1 − i \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\,\,\,\,=\sum\limits_{i=0}^{m+1}C_{m+1}^ia^{i}b^{m+1-i} =i=0∑m+1Cm+1iaibm+1−i
证毕。
- Lucas 定理
若 p p p 是质数,则对于任意整数 1 ≤ m ≤ n 1\le m\le n 1≤m≤n 有(为了方便,用 % \% % 代表取模,用 / / / 代表整除)
C n m ≡ C n % p m % p × C n / p m / p ( m o d p ) C_n^m\equiv C_{n\%p}^{m\%p}\times C_{n/p}^{m/p}(\mathrm{mod}\;p) Cnm≡Cn%pm%p×Cn/pm/p(modp)
这个定理我还不会证,有时间去学一下。
这个公式可以让我们在 log \log log 的时间内求出 n , m n,m n,m 较大但 p p p 较小时的组合数。
- ∑ i = 0 n ( C n i ) 2 = C 2 n n \sum\limits_{i=0}^n(C_n^i)^2=C_{2n}^n i=0∑n(Cni)2=C2nn
( 1 + x ) 2 n = ( 1 + x ) n ⋅ ( 1 + x ) n = ( C n 0 + C n 1 x + ⋯ + C n n x n ) ⋅ ( C n 0 + C n 1 x + ⋯ + C n n x n ) = ⋯ + ( C n 0 C n n + C n 1 C n n − 1 + ⋯ + C n k C n n − k + ⋯ + C n n C n 0 ) x n = ⋯ + ( C n 0 C n 0 + C n 1 C n 1 + ⋯ + C n k C n k + ⋯ + C n n C n n ) x n \begin{aligned} (1+x)^{2n} &= (1+x)^n\sdot (1+x)^n \\ &= (C_n^0+C_n^1x+\cdots+C_n^nx^n)\sdot(C_n^0+C_n^1x+\cdots+C_n^nx^n) \\ &= \cdots+(C_n^0C_n^n+C_n^1C_n^{n-1}+\cdots+C_n^kC_n^{n-k}+\cdots+C_n^nC_n^0)x^n\\ &=\cdots+(C_n^0C_n^0+C_n^1C_n^{1}+\cdots+C_n^kC_n^{k}+\cdots+C_n^nC_n^n)x^n\\ \end{aligned} (1+x)2n=(1+x)n⋅(1+x)n=(Cn0+Cn1x+⋯+Cnnxn)⋅(Cn0+Cn1x+⋯+Cnnxn)=⋯+(Cn0Cnn+Cn1Cnn−1+⋯+CnkCnn−k+⋯+CnnCn0)xn=⋯+(Cn0Cn0+Cn1Cn1+⋯+CnkCnk+⋯+CnnCnn)xn
即 x n x^n xn 的系数就是我们要求的。又
( 1 + x ) 2 n = ∑ i = 0 2 n C 2 n i x i (1+x)^{2n} = \sum_{i=0}^{2n}C_{2n}^ix^i (1+x)2n=i=0∑2nC2nixi
则可知 x n x^n xn 的系数是 C 2 n n C_{2n}^n C2nn,故成立。
变式:若 n < m n<m n<m,则 ∑ i = 0 n C n i C m i = C n + m n \sum\limits_{i=0}^nC_n^iC_m^i=C_{n+m}^n i=0∑nCniCmi=Cn+mn,推导过程同理。