20210709集训第四天集训
初识组合
加法原理与乘法原理
加法原理
乘法原理
排列组合
排列:
从
n
n
n 个不同的元素中,任取
m
m
m 个元素,按照一定顺序排成一列。(元素有序)
A n m = n ! ( n − m ) ! = n ∗ ( n − 1 ) ∗ . . . ∗ ( n − m − 1 ) A_n^m=\frac {n!}{(n-m)!}=n*(n-1)*...*(n-m-1) Anm=(n−m)!n!=n∗(n−1)∗...∗(n−m−1)
组合:
从
n
n
n 个不同元素中取出
m
m
m 个组成一个集合(不考虑顺序)
C n m = n ! m ! ( n − m ) ! = n ∗ ( n − 1 ) ∗ . . . ∗ ( n − m − 1 ) m ∗ ( m − 1 ) ∗ . . . ∗ 2 ∗ 1 C_n^m=\frac{n!}{m!(n-m)!}=\frac{n*(n-1)*...*(n-m-1)}{m*(m-1)*...*2*1} Cnm=m!(n−m)!n!=m∗(m−1)∗...∗2∗1n∗(n−1)∗...∗(n−m−1)
性质
- C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnn−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
- C n 0 + C n 1 + C n 2 + . . . + C n n = 2 n C_n^0+C_n^1+C_n^2+...+C_n^n=2^n Cn0+Cn1+Cn2+...+Cnn=2n
杨辉三角与二项式定理
杨辉三角:
我们可以发现杨辉三角
每一层的数字都为相应次方的二项式展开得到,如:
(
a
+
b
)
2
=
C
2
0
a
0
b
2
+
C
2
1
a
1
b
1
+
C
2
2
a
2
b
0
=
b
2
+
2
a
b
+
a
2
(a+b)^2=C_2^0a^0b^2+C_2^1a^1b^1+C_2^2a^2b^0=b^2+2ab+a^2
(a+b)2=C20a0b2+C21a1b1+C22a2b0=b2+2ab+a2
即每项的系数正好构成杨辉三角,于是我们有二项式定理:
(
a
+
b
)
n
=
∑
r
=
0
n
C
n
r
a
n
−
r
b
r
(a+b)^n=\sum_{r=0}^nC_n^ra^{n-r}b^r
(a+b)n=∑r=0nCnran−rbr
有了这个公式,我们就可以快速的求杨辉三角了
- f [ i ] [ j ] = f [ i − 1 ] [ j − 1 ] + f [ i − 1 ] [ j ] f[i][j]=f[i-1][j-1]+f[i-1][j] f[i][j]=f[i−1][j−1]+f[i−1][j] O ( N 2 ) O(N^2) O(N2)
- 利用等式 C n k = n − k + 1 k C n k − 1 C_n^k=\frac{n-k+1}kC_n^{k-1} Cnk=kn−k+1Cnk−1 ,从 C n 0 = 1 C_n^0=1 Cn0=1 开始递推 O ( N ) O(N) O(N)
code
注: 代码要先乘后除,避免出现小数
c[0]=1;
for(int i=1;i<=n;i++)
c[i]=c[i-1]*(n-i+1)/i;
排列组合模型
- 隔板法
【问题】 n n n 个人瓜分 m m m 个苹果,每个人至少分得一个,共有多少种分法?
转化在
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 + m n+m n+m 个人站成一排拍照,其中特定的 m m m 个人关系特别差,所以他们之间任意两个都不能相邻,共有多少种排法?
转化:有
n
+
1
n+1
n+1 个间隔,插入
m
m
m 块互异的板子,共有多少种插法
步骤1: 其余
n
n
n 个人全排列
A
n
n
A_n^n
Ann
步骤2:
m
m
m 个人插入
n
+
1
n+1
n+1 个空隙
C
m
n
+
1
C_m^{n+1}
Cmn+1
总方案:
A
n
n
×
C
n
+
1
m
A_n^n×C_{n+1}^m
Ann×Cn+1m
- 捆绑法
【问题】 n + m n+m n+m 个人站成一排拍照,其中特定的 m m m 个人关系特别好,所以他们之间必须相邻,共有多少种排法?
思路: m m m 个人绑成 1 1 1 个人;
总方案数: m ! × ( n + 1 ) ! m!×(n+1)! m!×(n+1)!
- 可重组合
相异元素可重排列: 从
n
n
n 个不同元素中可以重复地选取
m
m
m 个元素的排列。
排列总数为
n
m
n^m
nm
不全相异元素的排列: 如果在 n n n 个元素中,有 n 1 n_1 n1 个元素彼此相同,有 n 2 n_2 n2 个元素彼此相同……有 n m n_m nm 个元素彼此相同,并且 n 1 + n 2 + … + n m = n n_1+n_2+…+n_m=n n1+n2+…+nm=n,则这n个元素的全排列叫做不全相异元素的全排列。
全排列公式: n ! n 1 ! × n 2 ! × . . . × n m ! \frac {n!}{n_1!×n_2!×...×n_m!} n1!×n2!×...×nm!n!
- 圆排列
圆排列: 从 n n n 个不同元素中选取出 m m m 个元素,不分首尾地排成一个圆圈的排列叫做圆排列.
排列公式:
A
n
m
m
=
n
!
m
×
(
n
−
m
)
!
\frac {A_n^m}{m}=\frac {n!}{m×(n−m)!}
mAnm=m×(n−m)!n!
如果
m
=
n
m=n
m=n,则有
n
!
n
=
(
n
−
1
)
!
\frac {n!}n=(n−1)!
nn!=(n−1)! 种
- 错位排列
n n n个有序的元素应有 n ! n! n! 种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。任给一个 n n n,求出 1 , 2 , … … , n 1,2,……,n 1,2,……,n 的错排个数 D ( n ) D(n) D(n) 共有多少个。
递推关系式:
D
(
n
)
=
(
n
−
1
)
(
D
(
n
−
1
)
+
D
(
n
−
2
)
)
D(n)=(n-1)(D(n-1)+D(n-2))
D(n)=(n−1)(D(n−1)+D(n−2))
D
(
1
)
=
0
,
D
(
2
)
=
1
D(1)=0,D(2)=1
D(1)=0,D(2)=1
错排公式:
f
(
n
)
=
n
!
[
1
−
1
1
!
+
1
2
!
−
1
3
!
+
.
.
.
+
(
−
1
)
n
×
1
n
!
]
f(n)=n![1-\frac 1{1!}+\frac 1{2!}-\frac 1{3!}+...+(-1)^n×\frac 1{n!}]
f(n)=n![1−1!1+2!1−3!1+...+(−1)n×n!1]
其中,
n
!
=
1
×
2
×
3
×
.
.
.
×
n
n!=1×2×3×...×n
n!=1×2×3×...×n
特别地,有
0
!
=
0
,
1
!
=
1
0!=0,1!=1
0!=0,1!=1
5.Lucas(卢卡斯)定理
也是自闭~但是好在强度不高,最后勉强搞懂了。
内容: C n m m o d p = C s t × C q r m o d p ( m = p × t + r , n = p × s + q ) C_n^m\mod p=C_s^t\times C_q^r\mod p(m=p\times t+r,n=p\times s+q) Cnmmodp=Cst×Cqrmodp(m=p×t+r,n=p×s+q)
(作为一个为数不多好不容易终于听懂的定理,证明放一下~)
( 1 + x ) n m o d p = ( 1 + x ) p × s + q m o d p (1+x)^n\mod p=(1+x)^{p\times s+q}\mod p (1+x)nmodp=(1+x)p×s+qmodp
1.应用二项式定理,可得:
( 1 + x ) p × s + q m o d p = ∑ k = 0 p × s + q × C p × s + q k × x k m o d p (1+x)^{p\times s+q}\mod p=\sum_{k=0}^{p\times s+q} \times C^k_{p\times s+q} \times x^k \mod p (1+x)p×s+qmodp=∑k=0p×s+q×Cp×s+qk×xkmodp
将 k = p × t + r k=p\times t+r k=p×t+r代入上式,可得:
C p × s + q p × t + r × x p × t + r m o d p C_{p\times s+q}^{p\times t+r} \times x^{p\times t+r} \mod p Cp×s+qp×t+r×xp×t+rmodp
2.分解:
( 1 + x ) p × s + q m o d p = ( 1 + x ) p × s × ( 1 + x ) q m o d p = ( 1 + x ) p s × ( 1 + x ) q m o d p (1+x)^{p\times s+q} \mod p=(1+x)^{p\times s} \times (1+x)^q \mod p=(1+x)^{p^s}\times (1+x)^q \mod p (1+x)p×s+qmodp=(1+x)p×s×(1+x)qmodp=(1+x)ps×(1+x)qmodp
应用费马小定理,可得:
( 1 + x ) p s m o d p ≡ ( 1 + x p ) s m o d p (1+x)^{p^s} \mod p \equiv (1+x^p)^s \mod p (1+x)psmodp≡(1+xp)smodp
应用二项式定理,可得:
( 1 + x p ) s × ( 1 + x ) q m o d (1+x^p)^s\times (1+x)^q mod (1+xp)s×(1+x)qmod p ≡ ∑ i = 0 s × C s i × x p × i × ∑ j = 0 q × C q j × x j m o d p p\equiv \sum_{i=0}^s\times C_s^i\times x^{p\times i}\times \sum_{j=0}^q\times C_q^j\times x^j\mod p p≡∑i=0s×Csi×xp×i×∑j=0q×Cqj×xjmodp
将 i = t , j = r i=t,j=r i=t,j=r代入上式,可得:
C s t × x p × t × C r q × x r = C s t × C q r × x t × p + r m o d p C_s^t\times x^{p\times t}\times C_r^q\times x^r=C_s^t\times C_q^r\times x^{t\times p+r}\mod p Cst×xp×t×Crq×xr=Cst×Cqr×xt×p+rmodp
好嘛,都代出来了,然后我们看,上边两个最后的式子,都是由我们开始时候的那个
(
1
+
x
)
n
(1+x)^n
(1+x)n 代换出来的,而且代入后两个
x
x
x 的系数还是一样的,这不就说明
x
x
x 前面的系数也是一样的嘛,也就是
C
s
t
×
C
q
r
m
o
d
p
=
C
p
×
s
+
q
p
×
t
+
r
m
o
d
p
C_s^t\times C_q^r\mod p =C_{p\times s+q}^{p \times t+r}\mod p
Cst×Cqrmodp=Cp×s+qp×t+rmodp,而根据我们开始的
m
=
p
×
t
+
r
,
n
=
p
×
s
+
q
m=p\times t+r,n=p\times s+q
m=p×t+r,n=p×s+q 可得
C
n
m
m
o
d
p
=
C
s
t
×
C
q
r
m
o
d
p
C_n^m\mod p=C_s^t\times C_q^r\mod p
Cnmmodp=Cst×Cqrmodp ,得证~
- 费马小定理证明
当时上课讲的时候一直很困扰,因为一般来说,费马小定理不是 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 (\mod p) ap−1≡1(modp)嘛,这时候来了个 ( 1 + x ) p ≡ 1 + x p ( m o d p ) (1+x)^p \equiv 1+x^p(\mod p) (1+x)p≡1+xp(modp),就很迷。
后来问了老师,才会证,把原式应用二项式定理然后展开,可得:
原 式 原式 原式 = C p 0 × x 0 × 1 + C p 1 × x 1 × 1 + … + C p p × x p × 1 =C_p^0 \times x^0 \times 1 + C_p^1 \times x^1 \times 1 +…+C_p^p \times x^p \times 1 =Cp0×x0×1+Cp1×x1×1+…+Cpp×xp×1
式子里中间项全部都是用阶乘算的,所以在算分子上 p p p的阶乘的时候,因为是在 m o d p \mod p modp的情况下计算,所以都变成 0 0 0了,等于说只有首项和末项没有被约掉,化简之后就得到了 1 + x p ( m o d p ) 1+x^p(\mod p) 1+xp(modp),得证~
代码实现如下:
int lucas(int n,int m)
{
if(m==0)return 1;
return C(n%mod,m%mod)*lucas(n/mod,m/mod)%mod;
}