鴿巢原理應用於一道十分有意思的題目

2021-06-10 06:47:17 字數 1861 閱讀 2890

在組合數學中學習鴿巢原理。其中一道例題是這樣的:

從1,2,3,4,..., 200這200個整數中選取101個整數,則一定存在兩個數存在整除關係?

解答:乙個數對其按照2進行因式分解,總可寫成n = 2 ^ k * t(其中k >=0, t為奇數)。例如2 = 2 ^ 1 * 1; 3 = 2 ^ 0 * 3...

而1到200存在奇數1,3,5,7,..., 199一共100個奇數。我選取101個整數,則說明存在兩個整數i,j, 它們經過分解,t是相等的。所以前面的k是不一樣的。也就證明了i,j存在整除關係。很簡單是嗎?請看下面一道擴充套件題。

從1,2,3,4,..., 200這200個整數中選取100個整數,其中只有乙個數小於16,證明一定存在兩個數存在整除關係?

我們這樣想:

定義兩個集合a =  

b =

其中a是從200個整數中選取的100個整數,而b[i]則是某個a[j]經過按2分解最後的奇數t。

經過思考,若選取的100個數不存在整除關係,則每個數一定對映到不同的奇數。若兩個數經分解後得到相同的奇數,則這兩個數能夠整除。

我們再來分情況討論,

對於最小數15,

它對映到集合b的元素是15。假設對映到集合b為45的元素為m,則m和15是什麼關係呢?一定整除,對不對?所以存在整除。

對於13, 39

11, 33

9,  27

7, 21

5, 15

3, 9

1不用說,肯定存在整除關係。

關鍵是對於1到15之間的偶數,如何處理?

對於14, 14 = 2 * 7(k = 1)。 對映到b中的元素為7。

我們接著考慮b的為7的倍數的元素

我們知道105後面的對映到a就是它們本身,因為a中每個數都小於200.

接著我們隨便來考慮一組數值<35, 105>.105是35的倍數,為了使它們兩者對應到a中的元素不存在整除,則a中的元素一定是2 ^ k * 35(k > 0)。而這是a中的元素一定是14

的整倍數。所以要麼是14的倍數,要麼是105和35對應的數存在整數倍關係。

對於10,10 = 2 * 5(k = 1)處理方式和14一樣。

對於6,處理方式和14一樣。

接著我們來考慮12,8,4,2.

先來考慮2吧。

若a中存在元素2,若不存在整數關係,其它199個數都是奇數。我們知道,這些奇數中肯定存在整除關係。

再來考慮12吧。

對於12,12 = 2 ^ 2 * 3(k = 2, t = 3)

奇數為3.我們來考慮b中的 sub_b={9, 15, 21, 27, ...99, 105, 111, 117, ..., 195}

這些都是3的倍數。

為了不和12產生整除關係設定sub_b 到a中元素的對映關係為 2 ^ k * sub_b[i](其中一定是小於等於1的)

我們知道105以後的k一定是0.我們來看tri_pair<9, 27, 117>117是27的倍數,27是9的倍數。為了是它們對映到a中元素不能整除,所以2 ^ 1 * 27, 2 ^ 2 ^ 9。

這個時候我們發現,2 ^ 2 * 9 已經是12的倍數了。要麼9, 27, 117對應於a中的數之間存在整除關係,要麼其中有些數是12的倍數,總之,存在整除關係。

來考慮8和4。

對於4 = 2 ^ 2 * 1(k = 2, t = 1)

正如在對於12討論的那樣,一定存在4的倍數。

對於8 = 2 ^ 3 * 1(t = 1)對於3次方如何考慮呢?

還是按照原來的思路。

我們取sub_b =

這樣對於<3, 21, 63, 189>後面的在這裡就不寫了。

到現在,我們已經將1,2,3,4,5,..., 15全部討論完了。對於每個數都存在整除關係。

鴿巢原理簡單應用

從n個數裡面取出一些數,這些數的和是n的倍數。並輸出這些數。先預處理出前n個數的和用sum i 表示前i個數的和。若某個sum i 是n的倍數,直接輸出前i個數即可。否則說明n個數中對n取餘的結果有n 1種,即餘數為 1 n 1 根據鴿巢原理知必定至少存在兩個sum i 與sum j 對n取餘的結果...

WGAN GP應用於一維時序訊號

近年來生成對抗網路在各大頂會上大放異彩,但是大多研究集中在影象方面,衍生出一系列dcgan wgan等等模型,最近我在關於手語識別的研究中遇到資料量及資料種類過少的問題,故想到使用gan來生成手語資料,達到以假亂真的效果。除了這個方面外,gan在這些訊號的生成的研究對於醫療方面受損訊號的恢復 意圖生...

Oracle 10g資料庫管理 應用於開發(三)

d order by 子句 使用order by 子句排序 asc ascend 公升序 desc descend 降序 order by 子句在select 語句的結尾。查詢員工資訊按照部門的編號進行公升序排列,預設是asc sql select empno,ename,job,mgr,hired...