定义
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。
中学教科书给出的定义
如果被计数的事物有A、B、C三类,那么,A类和B类和C类元素个数总和= A类元素个数+ B类元素个数+C类元素个数—既是A类又是B类的元素个数—既是A类又是C类的元素个数—既是B类又是C类的元素个数+既是A类又是B类而且是C类的元素个数。(A∪B∪C = A+B+C - A∩B - B∩C - C∩A + A∩B∩C)[1]
数学推导:
两个集合的容斥关系公式:
A∪B =|A∪B| = |A|+|B| - |A∩B |(∩:重合的部分)
三个集合的容斥关系公式:
|A∪B∪C| = |A|+|B|+|C| - |A∩B| - |B∩C| - |C∩A| + |A∩B∩C|
举例
例0
一次期末考试,某班有15人数学得满分,有12人语文得满分,并且有4人语、数都是满分,那么这个班至少有一门得满分的同学有多少人?
分析
依题意,被计数的事物有语、数得满分两类,“数学得满分”称为“A类元素”,“语文得满分”称为“B类元素”,“语、数都是满分”称为“既是A类又是B类的元素”,“至少有一门得满分的同学”称为“A类和B类元素个数”的总和。
答案
15+12-4=23
例1
电视台向100人调查前一天收看电视的情况,有62人看过2频道,34人看过8频道,其中11人两个频道都看过。两个频道都没看过的有多少人?
100-(62+34-11)=15
例2(小学奥数题)
某校六⑴班有学生45人,每人在暑假里都参加体育训练队,其中参加足球队的有25人,参加排球队的有22人,参加游泳队的有24人,足球、排球都参加的有12人,足球、游泳都参加的有9人,排球、游泳都参加的有8人,问:三项都参加的有多少人?
分析:参加足球队的人数25人为A类元素,参加排球队人数22人为B类元素,参加游泳队的人数24人为C类元素,既是A类又是B类的为足球排球都参加的12人,既是B类又C类的为足球游泳都参加的9人,既是C类又是A类的为排球游泳都参加的8人,三项都参加的是A类B类C类的总和设为X。注意:这个题说的每人都参加了体育训练队,所以这个班的总人数即为A类B类和C类的总和。
答案:25+22+24-12-9-8+X=45 ,解得X=3[3]
例3(高中题)
在1到1000的自然数中,能被3或5整除的数共有多少个?不能被3或5整除的数共有多少个?
分析:显然,这是一个重复计数问题(当然,如果不怕麻烦你可以分别去数3的倍数,5的倍数)。我们可以把“能被3或5整除的数”分别看成A类元素和B类元素,能“同时被3或5整除的数(15的倍数)”就是被重复计算的数,即“既是A类又是B类的元素”。求的是“A类或B类元素个数”。我们还不能直接计算,必须先求出所需条件。1000÷3=333……1,能被3整除的数有333个(想一想,这是为什么?)同理,可以求出其他的条件。
例4(高中题)
分母是1001的最简分数一共有多少个?
分析:这一题实际上就是找分子中不能与1001进行约分的数。由于1001=7×11×13,所以就是找不能被7,11,13整除的数。
解答:1~1001中,有7的倍数1001/7 = 143 (个);有11的倍数1001/11 = 91 (个),有13的倍数1001/13 = 77 (个);有7*11=77;77是11的倍数1001/77 = 13 (个),有7*13=91;91是13的倍数;1001/91 = 11 (个),有11*13=143;143是13的倍数1001/143 = 7 (个).有1001的倍数1个。
由容斥原理知:在1~1001中,能被7或11或13整除的数有(143+91+77)-(13+11+7)+1=281(个),从而不能被7、11或13整除的数有1001-281=720(个).也就是说,分母为1001的最简分数有720个。
例5(小学奥数题)
某个班的全体学生在进行了短跑、游泳、投掷三个项目的测试后,有4名学生在这三个项目上都没有达到优秀,其余每人至少有一项达到了优秀,达到了优秀的这部分学生情况如下表:
求这个班的学生共有多少人?
分析:这个班的学生数,应包括达到优秀和没有达到优秀的。
4+17+18+15-6-6-5+2=39(人)
试一试:一个班有42人,参加合唱队的有30人,参加美术组的有25人,有5人什么都没有参加,求两种都参加的有多少人?
(30+25+5)-42=18(人)[3]
例6(小学奥数题)
在一根长的木棍上有三种刻度线,第一种刻度线将木棍分成10等份,第二种将木棍分成12等份,第三种将木棍分成15等份。如果沿每条刻度线将木棍锯断,木棍总共被锯成多少段?
分析:
很显然,要计算木棍被锯成多少段,只需要计算出木棍上共有多少条不同的刻度线,在此基础上加1就是段数了。
若按将木棍分成10等份的刻度线锯开,木棍有9条刻度线。在此木棍上加上将木棍分成12等份的11条刻度线,显然刻度线有重复的,如5/10和6/12都是1/2。同样再加上将木棍分成15等份的刻度线,也是如此。所以,我们应该按容斥原理的方法来解决此问题。用容斥原理的那一个呢?想一想,被计数的事物有那几类?每一类的元素个数是多少?
解答
解一:[10,12,15]=60,设木棍60厘米
60÷10=6厘米,60÷12=5厘米,60÷15=4(厘米
10等分的为第一种刻度线,共10-1=9(条)
12等分的为第二种刻度线,共12-1=11(条)
15等分的为第三种刻度线,过15-1=14(条)
第一种与第二种刻度线重合的[6,5]=30,60÷30-1=2-1=1(条)
第一种与第三种刻度线重合的[6,4]=12,60÷12-1=5-1=4(条)
第二种与第三种刻度线重合的[5,4]=20,60÷20-1=3-1=2(条)
三种刻度线重合的没有,[6、5、4]=60
因此,共有刻度线9+11+14-1-4-2=27条,木棍总共被锯成27+1=28段。
解二:总长看成单位1分别分成10、12、15段。1/10与1/12的最小公倍数1/2,1/10与1/15的最小公倍数1/5,1/12与1/15的最小公倍数1/3,1/10,1/12和1/15的最小公倍数为1,有10+12+15-(2+5+3)+1=28
解三:
10、12、15的最小公倍数是60,假设木棍就是长60,
1、那么,分成10等份的每份6,刻度就是
0,6,12,18,24,30,36,42,48,54,60
2、分成12等分的每份就是5,
0,5,10,15,20,25,30,35,40,45,50,55,60
3、分成15等分的每份就是4,
0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60
4、把相同刻度的合并,就是有刻度如下:
0,4,5,6,8,10,12,15,16,18,20,24,25,28,30,32,35,36,40,42,44,45,48,50,52,54,55,56,60[3]
例7
给定r,n求[1,r]内与n互素的个数有多少个?
分析:
看到这个问题,数论有学一点的童鞋可能会想如果r = n的话,不就是欧拉函数了吗?是的,可惜这个问题的r ,n是不一定会相等的。直接求解问题就是比较复杂的。所以我们还是研究这个问题是逆问题。也就是说求gcd(k,n) >= 2,在1 - n之间k有多少个 。那么我们就可以枚举n的素因子来进行求解。
//时间复杂度O(sqrt(n))...
int solve(int r, int n)
{
int p[N], top = 0, ans;
for(int i = 2; i * i <= n; i ++){
if(n % i == 0){
p[top ++] = i;
while(n % i == 0) n = n / i;
}
}
if(n > 1) p[top ++] = n;
//枚举子集来进行判断加减,cnt为子集元素个数
for(int i = 1; i < (i << top); i ++){
int cnt = 0, tmp = 1;
for(int j = 0; j < top; j ++){
cnt ++;
tmp = tmp * p[j];
}
}
if(cnt % 2) ans += r / tmp;
else ans -= r / tmp;
return r - ans;
}
鸽巢定理
考虑到容斥原理的思想,主要体现在最差原则:即考虑所有可能情况中,最不利于某件事情发生的情况。
第一抽屉原理
原理1: 把多于n+1个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件。
原理2 :把多于mn(m乘n)+1(n不为0)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于(m+1)的物体。
原理3 :把无穷多件物体放入n个抽屉,则至少有一个抽屉里 有无穷个物体。
第二抽屉原理
把(mn-1)个物体放入n个抽屉中,其中必有一个抽屉中至多有(m—1)个物体
摘自百度百科:
如果被计数的事物有A、B两类,那么,A类B类元素个数总和= 属于A类元素个数+ 属于B类元素个数—既是A类又是B类的元素个数。(A∪B = A+B - A∩B)
鸽笼原理应用:
1、从2、4、6、…、30这15个偶数中,至少任取几个数,其中一定有两个数之和是34?
答案: 9
2、从1、2、3、4、…、19、20这20个自然数中,至少任选几个数,就可以保证其中一定包括两个数,它们的差是12?
答案:13
3、 从1到20这20个数中,至少任取多少个数,必有两个数,其中一个数是另一个数的倍数?
答案:11
4、某校校庆,来了n位校友,彼此认识的握手问候.请你证明无论什么情况,在这n个校友中至少有两人握手的次数一样多?
答案:共有n位校友,每个人握手的次数最少是0次,即这个人与其他校友都没有握过手;最多有n-1次,即这个人与每位到会校友都握了手.然而,如果有一个校友握手的次数是0次,那么握手次数最多的不能多于n-2次;如果有一个校友握手的次数是n-1次,那么握手次数最少的不能少于1次.不管是前一种状态0、1、2、…、n-2,还是后一种状态1、2、3、…、n-1,握手次数都只有n-1种情况.把这n-1种情况看成n-1个抽屉,到会的n个校友每人按照其握手的次数归入相应的“抽屉”,根据抽屉原理,至少有两个人属于同一抽屉,则这两个人握手的次数一样多。
5、15个网球分成数量不同的4堆,数量最多的一堆至少有多少个球?
答案:此题实际是求出15可分拆多少种4个互不相同的整数之和,而15=1+2+3+9=1+2+4+8=1+2+5+7=1+3+4+7=1+3+5+6=2+3+4+6,所以最多一堆的球数可能是9、8、7、6,其中至少有6个。
整除问题
1、任取8个自然数,必有两个数的差是7的倍数。
解析:在与整除有关的问题中有这样的性质,如果两个整数a、b,它们除以自然数m的余数相同,那么它们的差a-b是m的倍数.根据这个性质,本题只需证明这8个自然数中有2个自然数,它们除以7的余数相同.我们可以把所有自然数按被7除所得的7种不同的余数0、1、2、3、4、5、6分成七类.也就是7个抽屉.任取8个自然数,根据抽屉原理,必有两个数在同一个抽屉中,也就是它们除以7的余数相同,因此这两个数的差一定是7的倍数。
2、对于任意的五个自然数,证明其中必有3个数的和能被3整除。
解析:
3、任意给定7个不同的自然数,求证其中必有两个整数,其和或差是10的倍数.
解析:注意到这些数除以10的余数即个位数字,以0,1,…,9为标准制造10个抽屉,标以[0],[1],…,[9].若有两数落入同一抽屉,其差是10的倍数,只是仅有7个自然数,似不便运用抽屉原则,再作调整:[6],[7],[8],[9]四个抽屉分别与[4],[3],[2],[1]合并,则可保证至少有一个抽屉里有两个数,它们的和或差是10的
摘自百度和网上一些帖子,整理以自己用
以下是一些关于抽屉定理和鸽巢定理的应用,会持续更新:
hdu 5776 抽屉定理