10.2 计数与概率基础
就是排列组合啦······
加法原理
做一件事情有n个办法,第i个办法有pi种方案,则一共需要p1+p2+······pn种方案。
乘法原理
做一件事情有n个步骤,第i个步骤有pi种方案,则一共有p1p2······pn种方案。
容斥原理
这里书上这里写的不好:
(截自百度百科,证明过程一般分为计次数和归纳法两种,这里不多作赘述)
有重复元素的全排列
有k个元素,其中第i个元素有ni个,求全排列的个数。
分析:没啥好分析的,这个有高中学历的其实都知道hhhh,答案为(n1+n2+n3·······nk)!/(n1!n2!n3!······nk!)。
可重复选择的组合
有n个不同元素,每个元素可以重复选择多次,一共选k个元素,有多少种选法?
分析:我们假设第i个元素选择了xi次,相当于求:x1+x2······+xn=k (xi都为自然数)的解的个数。如果都是正整数,那么这个问题显然用“插板法”就可以非常轻松的解决了。于是我们另yi=xi+1,则相当于求:y1+y2······+yn=n+k (yi都为正整数)的解的个数。那这个问题的答案就很简单了,n+k-1个空格插n-1个板,答案为C(n+k-1,n-1)。
10.2.1 杨辉三角与二项式定理
也是高中学过的知识点,两个图分别代表杨辉三角的两个性质:
组合数性质:
这里没什么重点要提的,唯一可能有点重要的就是用递推的方法去求C(n,k)的值,代码如下:
C[0]=1;//表示C(n,0)=1
for (int i=1;i<=k;i++) C[i]=C[i-1]*(n-i+1)/i;
10-6 无关的元素 (UVA 1635)
对于给定的n个数a1,a2······an,依次求出相邻两数之和来得到一个新数列。重复上述操作,最后结果将变成一个数。问这个数除以m的余数与哪些数无关?
例如n=3,m=2时,求和得到的即是a1+2a2+a3,这个结果除以m的余数与a2无关。
分析:显然最终的结果即是:C(n-1,0)*a1+C(n-1,1)*a2+C(n-1,2)*a3·······+C(n-1,n-1)*an。如果结果除以m的余数与ai无关,那么C(n-1,i-1)除以m的余数一定为0。于是这个问题就变成了判断C(n-1,0),C(n-1,1)······C(n-1,n-1)中哪些是m的倍数。
这个问题用上面介绍过的递推的方法就可以了(但在做除法的时候会有一些细节问题需要处理)。
10.2.2 数论中的计数问题
约数的个数
给出正整数n的唯一分解式n=p1a1p2a2p3a3···pkak,求n的正约数的个数。
分析:显然,n的任意正约数,将他转化为唯一分解形式,一定不会产生新的素因子,也就是说一定肯定表示成p1b1p2b2p3b3···pkbk的形式,bi可以是0,1,2······ai共ai+1种情况,而且不同的素因子之间保持相护独立的关系。于是有n的正约数的个数为:
(a1+1)(a2+1)(a3+1)·······(ak+1)
小于n且与n互素的数
给出正整数n的唯一分解式n=p1a1p2a2p3a3···pkak,求1-n中与n互素的数的个数T。
分析&#x