2021-07-10

初识组合

加法原理与乘法原理

加法原理
在这里插入图片描述
乘法原理
在这里插入图片描述


排列组合

排列
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=(nm)!n!=n(n1)...(nm1)

组合
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!(nm)!n!=m(m1)...21n(n1)...(nm1)

性质

  1. C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnnm
  2. 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=Cn1m+Cn1m1
  3. 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=0nCnranrbr

有了这个公式,我们就可以快速的求杨辉三角了

  1. 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[i1][j1]+f[i1][j] O ( N 2 ) O(N^2) O(N2)
  2. 利用等式 C n k = n − k + 1 k C n k − 1 C_n^k=\frac{n-k+1}kC_n^{k-1} Cnk=knk+1Cnk1 ,从 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;

排列组合模型

  1. 隔板法
    【问题】 n n n 个人瓜分 m m m 个苹果,每个人至少分得一个,共有多少种分法?

转化在 n − 1 n−1 n1 个空隙中选择 m − 1 m−1 m1 个位置的方案数
在这里插入图片描述
C n − 1 m − 1 C_{n−1}^{m−1} Cn1m1

  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

  1. 捆绑法
    【问题】 n + m n+m n+m 个人站成一排拍照,其中特定的 m m m 个人关系特别好,所以他们之间必须相邻,共有多少种排法?

思路: m m m 个人绑成 1 1 1 个人;

总方案数: m ! × ( n + 1 ) ! m!×(n+1)! m!×(n+1)!

  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!

  1. 圆排列
    圆排列: 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×(nm)!n!
如果 m = n m=n m=n,则有 n ! n = ( n − 1 ) ! \frac {n!}n=(n−1)! nn!=(n1)!

  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)=(n1)(D(n1)+D(n2))
       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![11!1+2!13!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 pi=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) ap11(modp)嘛,这时候来了个 ( 1 + x ) p ≡ 1 + x p ( m o d    p ) (1+x)^p \equiv 1+x^p(\mod p) (1+x)p1+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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值