[組合數學] 圓排列和歐拉函數為啥有關係:都是polya定理的鍋

本文是一個笨比學習組合數學的學習筆記,因為是笨比,所以寫的應該算是很通俗易懂了。

首先,我們考慮這麼一個問題:你有無窮多的\(p\)種顏色的珠子,現在你想要的把他們中的\(n\)個以圓形的形狀等間距的黏在一個可以旋轉的圓盤上,求方案數。

然後,該問題的答案是 \(\frac{1}{n}\Sigma_{d|n}\phi(\frac{n}{d})p^d\) ,之中\(\phi()\)表示歐拉函數,下面解釋一下為什麼會出現這樣一個公式。

首先,我們來複習一下polya定理:設一個序列上定義了一置換群\(|G|\),則對該序列做\(p\)種顏色的染色,方案數為\(\frac{1}{|G|}\Sigma^{|G|}_{i=1}p^{c_i}\),之中,\(|G|\)表示置換群大小(元素個數),\(c_i\)表示\(G\)中第\(i\)個置換的循環節數目。

那麼在上述圓排列問題中,置換群也就是旋轉變換的群了,注意這裡不考慮翻轉變換(這也是為什麼題目里說要黏在可旋轉的圓盤上的原因,這樣就和翻轉變換無關了)。那麼顯然,一個有\(n\)個珠子的圓環,一共對應了\(n\)種旋轉變換,分別是從轉\(1\)個單位到轉\(n\)個單位(也就是不轉,或者說轉0個單位)的\(n\)種。因此,置換群大小\(|G|=n\)

\(|G|=n\)代入polya的公式里,得到\(ans=\frac{1}{n}\Sigma^{n}_{i=1}p^{c_i}\),那麼對比真正的答案,接下來要說明的就是,為什麼\(\Sigma^{n}_{i=1}p^{c_i}=\Sigma_{d|n}\phi(\frac{n}{d})p^d\)

答案其實簡單的有些弱智:合併同類項

\(\Sigma^{n}_{i=1}p^{c_i}\)這一式子里,其實有\(n\)項,那麼很自然的一個想法就是:\(p^{c_i}\)是不是有不少重複的呢?事實上,是的,甚至只有\(\sqrt{n}\)種不同的\(p^{c_i}\)

下面隨便假設有個指數\(d\),那我想知道\(\Sigma^{n}_{i=1}p^{c_i}\),有幾個\(p^d\)出現,也就是有幾個\(c_i=d\)。回憶一下,這裡\(c_i\)指的是第\(i\)個置換循環節的數量,這個要怎麼求呢?這裡需要一個簡單但nb的小知識:

定理:對於\(n\)個珠子組成的圓的旋轉變換來說,旋轉了\(x\)個單位的變換對應的循環節數量有\(gcd(n,x)\)個。

不是證明的證明:考慮一個青蛙跳石頭的問題,也就是有\(n\)塊石頭圓形排列,編號從\(0\)\(n-1\),青蛙初始在\(pos\)的位置,每次青蛙會跳x步,那麼青蛙跳一步就相當於\(pos=(pos+x)%k\),現在,請問青蛙一直跳下去,能踩到多少塊石頭。例如,\(n=6,x=4,pos=2\)時,青蛙就只能跳到編號為\(0,2,4\)的三塊兒石頭上。該問題的答案是\(\frac{n}{gcd(n,x)}\),這個證明略了,這是個比較好理解但不太好表述的數論結論。

那麼,如果我們把旋轉\(x\)個單位的置換群理解成每步跳\(x\)格的青蛙的話,就有循環節長度 = 青蛙能跳到的石頭個數 = \(\frac{n}{gcd(n,x)}\) 。又因為從青蛙的例子里可以看出,該長度和青蛙初始的\(pos\)無關,所以所有的循環節長度都是\(\frac{n}{gcd(n,x)}\)
進而,由於 n=循環節長度*循環節數量,就可以解得循環節數量為\(gcd(n,x)\),這就是旋轉\(x\)對應置換的循環節數量。

書歸正傳,我們現在想知道的是,給定一個整數\(d\),有幾個\(p^d\)出現在\(\Sigma^{n}_{i=1}p^{c_i}\)中,或者說多少個\(c_i=d\)\(c_i\)的含義是循環節數量,也就是對於\(x\in [1,n]\),有多少個\(x\)對應的循環節數量是\(d\)。廢話不多說,按剛才的結論,這也就是問有多少個\(x\)滿足\(gcd(n,x)=d\)

有多少個\(x\)滿足\(gcd(n,x)=d\):這又是個數論問題,首先,變換成\(gcd(\frac{n}{d},\frac{x}{d})=1\),這個變換是科學的,因為\(gcd(n,x)=d\)\(n\)\(x\)一定是\(d\)的倍數。那麼,有多少個\(x\)滿足\(gcd(\frac{n}{d},\frac{x}{d})=1\)呢?由於滿足\(gcd(\frac{n}{d},狗)=1\)的狗有\(\phi(n/d)\)個(根據歐拉函數的定義),而狗和\(x\)顯然是一一對應的,所以這樣的\(x\)就也有\(\phi(n/d)\)個。

所以,\(ans=\frac{1}{n}\Sigma^{n}_{i=1}p^{c_i}=\frac{1}{n}\Sigma_{d|n}\phi(\frac{n}{d})p^d\),這裡\(d|n\)是因為根據上面推導,循環節數量\(d\)顯然一定是\(n\)的因子。