[博客觀賞效果更佳]
github
cnblogs
近日,一國外小哥學習了這個定理,竟然能預處理出整數劃分的方案數!快跟小編來看看吧
這個小哥學習的定理,就是小編(我)接下來要講的五邊形數定理
好的,讓我們一起來看看這個定理吧
五邊形數是啥
百度百科
用圖來講,就是若干個點,排成若干個五邊形,需要多少個點。
百度百科上有一個很清楚的圖:
它的通項公式爲 an=2n(3n−1),前面幾項是 0,1,5,12,22,35,51,70,92,117,145,176,210...。你可以在 OEIS 上找到它,是序列 A000326
我們要研究的是 廣義五邊形數,是這樣一個數列:p=a0,a1,a−1,a2,a−2...
其中,如果 p 的下標是負數,照樣代入到上面的通項公式裏算即可。容易證明,當 n<0 時,pn 也是正的。前面幾項是 0,1,2,5,7,12,15,22,26,35,40,51,57,70,77,92,100,117...,同樣可以在 OEIS 上找到它是 A001318
它能幹啥
歐拉函數(五邊形數)
(爲了和歐拉數論函數區別開來,這裏給它起名叫歐拉函數-五邊形數(*/ω\*)
是這樣一個函數:φ(x)=(1−x)(1−x2)(1−x3)(1−x4)...(1−x∞)=i=1∏∞(1−xi)
這東西有一個很神奇的性質。如果你閒的沒事,可以暴力拆開它,發現它等於
x0−x1−x2+x5+x7−x12−x15+x22+x26...=i=1∑∞(−1)(i+1)/2xpi
係數:一個正,兩個負,兩個正,兩個負,兩個正,兩個負…
指數:廣義五邊形數
與整數劃分問題的聯繫
然後我們可以來解決整數劃分問題。設 P(n) 表示將 n 分成若干個整數的無序方案(即,a+b 和 b+a 只算一次),同一個數可以用很多次。
比如,P(4)=5,因爲 4
=1+1+1+1
=1+1+2
=1+3
=2+2
=4
特殊地,P(0)=1
我們求出 P(n) 的生成函數 f(x)=n=0∑∞P(n)xn
給它換個定義:我們要選出若干個(可以是 0 個) 1,若干個 2,若干個 3…使得選出來的所有數和爲 n。
這樣就好考慮了。看這個式子:
(1+x+x2+x3...)(1+x2+(x2)2+(x2)3...)(1+x3+(x3)2+(x3)3...)...
第一個因式表示我們能隨便選擇用多少個 x1
第二個因式表示我們能隨便選擇用多少個 x2
…
乘起來之後,考慮 xn 的係數,你會發現它就是 P(n)!是不是特別巧妙φ(>ω<*)
於是 f(x)=(1+x+x2+x3...)(1+x2+(x2)2+(x2)3...)(1+x3+(x3)2+(x3)3...)...=n=1∏∞i=0∑∞(xn)i
然後我們用等比數列求和公式化一下,得到:
f(x)=n=1∏∞1−xn1
我們發現它就是歐拉函數-五邊形數的倒數(/≧▽≦/)!
即
φ(x)f(x)=1
也就是
(1−x−x2+x5+x7−x12−x15...)(n=0∑∞P(n)xn)=1
觀察其中 xn 項的係數(分別考慮左邊和右邊的括號出的是幾次項),容易發現這個係數應該是 P(n)−P(n−1)−P(n−2)+P(n−5)+P(n−7)...
n=0 時,這個式子顯然爲 1。那麼 n>0 時, xn 乘以它的係數的和就得是 0 了。
然後我們發現等式右邊是 1。並且原式爲恆等式,所以 x 取任何值都成立。爲了讓 x 取任何值時等式都成立,對於 n>0 時,P(n)−P(n−1)−P(n−2) 這個可憐的等式只好取 0 了。
然後就得到了:
P(n)−P(n−1)−P(n−2)+P(n−5)+P(n−7)−P(n−12)−P(n−15)...=0
於是 P(n)=P(n−1)+P(n−2)−P(n−5)−P(n−7)+P(n−12)+P(n−15)...
然後 ≤n 的五邊形數是 n 級別的(注意到五邊形數的通項公式是二次的)
於是我們可以遞推出 P(n),是 O(nn) 的,是不是很厲害呢(✪ω✪)
好了,以上就是這個定理的全部內容了,喜歡記得收藏起來喲