定义
排列
A
n
m
A_{n}^{m}
Anm(也可以写成
P
n
m
P_{n}^{m}
Pnm)的意思是从
n
n
n个球中选出
m
m
m个数出来进行排列。
那么
A
n
m
=
n
∗
(
n
−
1
)
∗
⋯
∗
(
n
−
m
+
1
)
=
n
!
(
n
−
m
)
!
A_{n}^{m}=n*(n-1)*\dots*(n-m+1)=\frac{n!}{(n-m)!}
Anm=n∗(n−1)∗⋯∗(n−m+1)=(n−m)!n!
组合
C
n
m
C_{n}^{m}
Cnm就是从
n
n
n个数中选
m
m
m个数组为一个集合,问有多少种不同集合的取法
C
n
m
=
A
n
m
m
!
C_{n}^{m}=\frac{A_{n}^{m}}{m!}
Cnm=m!Anm,上面取出来共有
m
!
m!
m!中,故除去就好
组合数的求法
定义法
C
n
m
=
A
n
m
m
!
=
n
!
(
n
−
m
)
!
∗
m
!
C_{n}^{m}=\frac{A_{n}^{m}}{m!}=\frac{n!}{(n-m)!*m!}
Cnm=m!Anm=(n−m)!∗m!n!
在
n
,
m
n,m
n,m比较大的时候可以处理阶乘和逆元
int inv[maxn],fac[maxn];
int fac_inv[maxn];
void init(){
fac[1]=1;
fac_inv[0]=fac_inv[1]=inv[0]=inv[1]=1;
for(int i=2;i<maxn;i++){
fac[i]=1ll*fac[i-1]*i%mo;
inv[i]=((mo-mo/i)*inv[mo%i]*1ll)%mo;
}
for(int i=2;i<maxn;i++){
fac_inv[i]=fac_inv[i-1]*inv[i]%mo;
}
}
递推式
C
n
m
=
n
!
(
n
−
m
)
!
∗
m
!
=
n
!
(
n
−
m
+
1
)
!
∗
(
m
−
1
)
!
∗
n
−
m
+
1
m
=
C
n
m
−
1
∗
n
−
m
+
1
m
C_{n}^{m}=\frac{n!}{(n-m)!*m!}=\frac{n!}{(n-m+1)!*(m-1)!}*\frac{n-m+1}{m}=C_{n}^{m-1}*\frac{n-m+1}{m}
Cnm=(n−m)!∗m!n!=(n−m+1)!∗(m−1)!n!∗mn−m+1=Cnm−1∗mn−m+1
递推式一般用于
n
n
n很大,
m
m
m很小的情况
杨辉三角
C
n
m
=
n
!
(
n
−
m
)
!
∗
m
!
=
(
n
−
1
)
!
∗
(
m
+
n
−
m
)
(
n
−
m
)
!
∗
m
!
=
(
n
−
1
)
!
(
n
−
m
)
!
∗
(
m
−
1
)
!
+
(
n
−
1
)
!
(
n
−
m
−
1
)
!
∗
m
!
=
C
n
−
1
m
−
1
+
C
n
−
1
m
C_{n}^{m}=\frac{n!}{(n-m)!*m!}=\frac{(n-1)!*(m+n-m)}{(n-m)!*m!}=\frac{(n-1)!}{(n-m)!*(m-1)!}+\frac{(n-1)!}{(n-m-1)!*m!}=C_{n-1}^{m-1}+C_{n-1}^{m}
Cnm=(n−m)!∗m!n!=(n−m)!∗m!(n−1)!∗(m+n−m)=(n−m)!∗(m−1)!(n−1)!+(n−m−1)!∗m!(n−1)!=Cn−1m−1+Cn−1m
时间复杂度是
O
(
n
2
)
O(n^2)
O(n2),通常用于模数不是质数的时候,也就是处理不了逆元,来恶心你的时候。
性质
一
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
−
m
n-m
n−m个,留
m
m
m个出来
二
C
n
+
m
+
1
m
=
∑
i
=
0
i
<
=
m
C
n
+
i
i
C_{n+m+1}^{m}=\sum_{i=0}^{i<=m}C_{n+i}^{i}
Cn+m+1m=∑i=0i<=mCn+ii
由杨辉三角可得
C
n
+
m
+
1
m
=
C
n
+
m
m
+
C
n
+
m
m
−
1
C_{n+m+1}^{m}=C_{n+m}^{m}+C_{n+m}^{m-1}
Cn+m+1m=Cn+mm+Cn+mm−1
C
n
+
m
m
−
1
=
C
n
+
m
−
1
m
−
1
+
C
n
+
m
−
1
m
−
2
C_{n+m}^{m-1}=C_{n+m-1}^{m-1}+C_{n+m-1}^{m-2}
Cn+mm−1=Cn+m−1m−1+Cn+m−1m−2
C
n
+
m
−
1
m
−
2
C_{n+m-1}^{m-2}
Cn+m−1m−2又可以分解
最后
C
n
+
2
1
=
C
n
+
1
1
+
C
n
+
1
0
C_{n+2}^{1}=C_{n+1}^{1}+C_{n+1}^{0}
Cn+21=Cn+11+Cn+10
C
n
+
1
0
=
C
n
0
C_{n+1}^{0}=C_{n}^{0}
Cn+10=Cn0
得证
三
C
n
m
∗
C
m
r
=
C
n
r
∗
C
n
−
r
m
−
r
C_{n}^{m}*C_{m}^{r}=C_{n}^{r}*C_{n-r}^{m-r}
Cnm∗Cmr=Cnr∗Cn−rm−r
先从
n
n
n个当中选
m
m
m个,在从
m
m
m中选
r
r
r个就相当于
n
n
n个当中选
r
r
r个,再从
n
−
r
n-r
n−r个当中选
m
−
r
m-r
m−r个补到
m
m
m个,如果不能理解直接拆开乘起来就完事了
四
∑
i
=
0
i
<
=
n
C
n
i
∗
x
i
=
(
1
+
x
)
n
\sum_{i=0}^{i<=n}C_{n}^{i}*x^i=(1+x)^n
∑i=0i<=nCni∗xi=(1+x)n
二项式定理直接搞
五
∑
i
=
0
i
<
=
n
C
n
i
∗
(
−
1
)
i
=
0
\sum_{i=0}^{i<=n}C_{n}^{i}*(-1)^i=0
∑i=0i<=nCni∗(−1)i=0
在四中将
x
=
−
1
x=-1
x=−1带进去就好了
六
C
n
1
+
C
n
3
+
⋯
=
C
n
0
+
C
n
2
+
⋯
=
2
n
−
1
C_{n}^{1}+C_{n}^{3}+\dots=C_{n}^{0}+C_{n}^{2}+\dots=2^{n-1}
Cn1+Cn3+⋯=Cn0+Cn2+⋯=2n−1
将
x
=
1
x=1
x=1代入四式
得到的相减,然后得到
2
∗
(
C
n
0
+
C
n
2
…
)
=
2
n
2*(C_{n}^{0}+C_{n}^{2}\dots)=2^{n}
2∗(Cn0+Cn2…)=2n
然后就可以得到六式
七
C
n
+
m
r
=
∑
i
=
0
i
<
=
m
i
n
(
n
,
m
,
r
)
C
n
i
∗
C
m
r
−
i
C_{n+m}^{r}=\sum_{i=0}^{i<=min(n,m,r)}{C_{n}^{i}*C_{m}^{r-i}}
Cn+mr=∑i=0i<=min(n,m,r)Cni∗Cmr−i
把
n
+
m
n+m
n+m个数分为
n
n
n个数和
m
m
m个数一组,即可证明
八
m
∗
C
n
m
=
n
∗
C
n
−
1
m
−
1
m*C_{n}^{m}=n*C_{n-1}^{m-1}
m∗Cnm=n∗Cn−1m−1
1:暴力拆开相乘即可
九
∑
i
=
0
i
<
=
n
(
C
n
i
∗
i
)
=
n
∗
2
n
−
1
\sum_{i=0}^{i<=n}({C_{n}^{i}*i})=n*2^{n-1}
∑i=0i<=n(Cni∗i)=n∗2n−1
=
∑
i
=
0
i
<
=
n
(
n
!
i
!
∗
(
n
−
i
)
!
∗
i
)
=\sum_{i=0}^{i<=n}(\frac{n!}{i!*(n-i)!}*i)
=∑i=0i<=n(i!∗(n−i)!n!∗i)
=
∑
i
=
0
i
<
=
n
(
n
∗
(
n
−
1
)
!
(
i
−
1
)
!
∗
(
n
−
i
)
!
)
=\sum_{i=0}^{i<=n}(n*\frac{(n-1)!}{(i-1)!*(n-i)!})
=∑i=0i<=n(n∗(i−1)!∗(n−i)!(n−1)!)
=
n
∗
∑
i
=
0
i
<
=
n
(
(
n
−
1
)
!
(
i
−
1
)
!
∗
(
n
−
i
)
!
)
=n*\sum_{i=0}^{i<=n}(\frac{(n-1)!}{(i-1)!*(n-i)!})
=n∗∑i=0i<=n((i−1)!∗(n−i)!(n−1)!)
=
n
∗
∑
i
=
0
i
<
n
(
C
n
−
1
i
)
=n*\sum_{i=0}^{i<n}(C_{n-1}^{i})
=n∗∑i=0i<n(Cn−1i)
=
n
∗
2
n
−
1
=n*2^{n-1}
=n∗2n−1
十and十一
∑
i
=
0
n
(
n
i
)
i
2
=
n
(
n
+
1
)
2
n
−
2
\sum_{i=0}^{n}{n\choose i}i^2=n(n+1)2^{n-2}
i=0∑n(in)i2=n(n+1)2n−2
仍然可以每个球分开算贡献。将一个选球方案中右数第
i
(
1
≤
i
)
i(1\le i)
i(1≤i) 个球的权值设置为
i
2
−
(
i
−
1
)
2
=
2
i
−
1
i^2-(i-1)^2=2i-1
i2−(i−1)2=2i−1 即可。则左式应当等于
∑
i
=
1
n
2
i
−
1
∑
x
=
0
n
−
i
(
n
−
i
x
)
(
2
x
+
1
)
\sum_{i=1}^{n}2^{i-1}\sum_{x=0}^{n-i}{n-i\choose x}(2x+1)
i=1∑n2i−1x=0∑n−i(xn−i)(2x+1)
对于某一个
i
i
i ,计算里面一个求和,用 2.3.集合大小
的结论得知
∑
x
=
0
n
−
i
(
n
−
i
x
)
(
2
x
+
1
)
=
(
n
−
i
+
1
)
2
n
−
i
\sum_{x=0}^{n-i}{n-i\choose x}(2x+1)=(n-i+1)2^{n-i}
x=0∑n−i(xn−i)(2x+1)=(n−i+1)2n−i
然后刚好和
2
i
−
1
2^{i-1}
2i−1 合在一起成为
2
n
−
1
2^{n-1}
2n−1 了,妙哉!故左式应当为
2
n
−
1
∑
i
=
1
n
(
n
−
i
+
1
)
=
n
(
n
+
1
)
2
n
−
2
2^{n-1}\sum_{i=1}^{n}(n-i+1)=n(n+1)2^{n-2}
2n−1i=1∑n(n−i+1)=n(n+1)2n−2
得证。
Q
.
E
.
D
.
\tt Q.E.D.
Q.E.D.