鸽巢原理
先来看鸽巢原理最简单的说明,若有n个鸽巢,n+1个鸽子,则至少有一个巢内有至少两个鸽子。
鸽巢原理主要不是用来计数,但是可以结合反证法来证明一些看起来很巧妙很难想到的数论结论,下面也主要通过几个例子来介绍鸽巢原理。
一个学生有37天用来准备考试。根据以往的经验,他知道他需要的学习时间不超过60小时。他还希望每天至少学习1个小时。请你证明:无论她如何安排她的学习时间(假设每天的学习时间是一个整数),都存在连续的若干天,在此期间他恰好学习了13个小时。
证明如下:
不
妨
设
a
1
是
第
一
天
学
习
的
时
间
,
a
2
是
第
一
天
和
第
二
天
学
习
的
时
间
总
和
,
以
此
类
推
,
由
题
可
得
a
是
一
个
严
格
递
增
序
列
,
即
:
1
<
=
a
1
<
a
2
<
…
…
<
a
37
<
=
60
(
序
列
1
)
易
得
序
列
a
1
+
13
,
a
2
+
13
…
…
a
3
7
+
13
也
是
一
个
严
格
递
增
序
列
,
即
:
14
<
=
a
1
+
13
<
a
2
+
13
<
…
…
<
a
37
+
13
<
=
73
(
序
列
2
)
由
此
可
知
这
74
个
数
都
是
1
到
73
之
间
的
数
,
由
鸽
巢
原
理
可
知
必
有
两
个
数
是
一
样
的
,
由
于
数
列
1
和
数
列
2
都
是
单
调
递
增
的
,
所
以
必
然
存
在
a
i
=
a
j
+
13
从
而
此
人
在
第
j
+
1
,
j
+
2
,
…
…
,
i
天
总
共
学
习
了
13
个
小
时
不妨设a_1是第一天学习的时间,a_2是第一天和第二天学习的时间总和,以此类推,由题可得a是一个严格递增序列,即:\\ 1<=a_1<a_2<……<a_{37}<=60(序列1)\\ 易得序列a_1+13,a_2+13……a_37+13也是一个严格递增序列,即:\\ 14<=a_1+13<a_2+13<……<a_{37}+13<=73(序列2)\\ 由此可知这74个数都是1到73之间的数,由鸽巢原理可知必有两个数是一样的,由于数列1和数列2都是单调递增的,所以必然存在\\ a_i=a_j+13\\ 从而此人在第j+1,j+2,……,i天总共学习了13个小时
不妨设a1是第一天学习的时间,a2是第一天和第二天学习的时间总和,以此类推,由题可得a是一个严格递增序列,即:1<=a1<a2<……<a37<=60(序列1)易得序列a1+13,a2+13……a37+13也是一个严格递增序列,即:14<=a1+13<a2+13<……<a37+13<=73(序列2)由此可知这74个数都是1到73之间的数,由鸽巢原理可知必有两个数是一样的,由于数列1和数列2都是单调递增的,所以必然存在ai=aj+13从而此人在第j+1,j+2,……,i天总共学习了13个小时
到最后也就不难看出这个如此巧妙的13小时是怎么来的了,其实是为了刚好凑出那个鸽巢原理的条件,事实上14小时,15小时也是满足条件的(不妨自己想想为什么?)
再来看一题有些类似的题:
这题的题意很简单,看起来很抽象,其实就是问你m个整数,是否一定存在连续的数,这几个数的和能被m整除,可以用反证法来说明:
考
虑
m
个
和
a
1
,
a
1
+
a
2
,
…
…
a
1
+
a
2
…
…
a
m
假
设
这
m
个
和
都
不
被
m
整
除
,
即
除
m
都
有
一
个
非
零
整
数
,
整
数
范
围
从
1
到
m
−
1
,
一
共
是
m
−
1
个
数
,
但
是
我
们
知
道
有
m
个
数
来
取
模
,
根
据
鸽
巢
原
理
,
这
个
m
个
和
的
模
至
少
有
两
个
是
相
同
的
,
假
设
相
同
的
摸
是
x
,
即
:
a
1
+
a
2
…
…
a
i
=
a
m
+
x
a
1
+
a
2
…
…
a
j
=
b
m
+
x
那
么
两
边
一
减
就
可
以
得
a
k
+
…
…
+
a
j
=
(
b
−
a
)
m
结
果
得
证
考虑m个和a_1,a_1+a_2,……a_1+a_2……a_m\\ 假设这m个和都不被m整除,即除m都有一个非零整数,整数范围从1到m-1,一共是m-1个数,\\但是我们知道有m个数来取模,根据鸽巢原理,这个m个和的模至少有两个是相同的,假设相同的摸是x,即:\\ a_1+a_2……a_i=am+x a_1+a_2……a_j=bm+x\\ 那么两边一减就可以得a_k+……+a_j=(b-a)m\\ 结果得证
考虑m个和a1,a1+a2,……a1+a2……am假设这m个和都不被m整除,即除m都有一个非零整数,整数范围从1到m−1,一共是m−1个数,但是我们知道有m个数来取模,根据鸽巢原理,这个m个和的模至少有两个是相同的,假设相同的摸是x,即:a1+a2……ai=am+xa1+a2……aj=bm+x那么两边一减就可以得ak+……+aj=(b−a)m结果得证