天天看點

《數學與泛型程式設計:高效程式設計的奧秘》一3.4 完美數

正如3.1節所說,古希臘人對數字的各種屬性都很感興趣。他們所提出的一個概念叫做完美數(perfect number),也就是其值等于所有真因子之和的數。古希臘人知道下面這四個完美數:

496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248

8128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064

有人認為完美數與自然及宇宙的結構有關。例如28這個完美數就與月亮繞地球旋轉所經曆的天數相近。

古希臘人真正想要知道的是有沒有一種方式能夠推測出其他的完美數。他們對已知的完美數做了素因子分解(prime factorization):

496 = 16·31 = 24·31

8128 = 64·127 = 26·127

并且觀察到下列規律:

6 = 2·3 = 21·(22-1)

28 = 4·7 = 22·(23-1)

120 = 8·15 = 23·(24-1)不是完美數

496 = 16·31 = 24·(25-1)

2016 = 32·63 = 25·(26-1)不是完美數

8128 = 64·127 = 26·(27-1)

如果一個數可以寫成上述形式,而且其中的第二項是素數,那麼這個數就是完美數。歐幾裡得在公元300年左右證明了這個結論。

定理3.3 (《幾何原本》第9卷第36号命題)

如果是素數,那麼是完美數。

有用的公式

開始證明該定理之前,大家應該先記住兩個代數公式。首先是幂差(difference of powers)公式:

(3.1)

這個公式很容易就能通過下面兩個等式推導出來:

x(xn + xn-1y + … + xyn-1 + yn) = xn-1 + xny + xn-1y2 + … + xyn(3.2)

y(xn + xn-1y + … + xyn-1 + yn) = xny + xn-1y2 + … + xyn + yn-1(3.3)

根據配置設定律,等式(3.2)與等式(3.3)的左右兩側是分别相等的。用等式(3.2)減去等式(3.3),就可以得到等式(3.1)。

第二個有用的公式,是奇數次幂的求和(sum of odd powers)公式:

x2n-1 + y2n-1 = (x + y)(x2n-x2n-1y + …-xy2n-1 + y2n)(3.4)

要想推導出這個公式,我們可以先把求和轉化為求差,然後套用前面所得到的等式(3.1):

x2n+1 + y2n+1 = x2n+1--y2n+1

= x2n+1-(-y)2n+1

= (x-(-y))(x2n + x2n-1(-y)+…+(-y)2n)

= (x + y)(x2n-x2n-1y +…-xy2n-1+ y2n)

在剛才的推導過程中,之是以能夠把-y2n+1變為(-y)2n+1,是因為-1的奇數次方依然是-1,是以可以把-y2n+1寫成(-1)2n+1y2n+1,進而寫成(-y)2n+1。我們在證明定理3.3的時候,亟須使用這兩個公式。

我們知道,當n大于0時:

《數學與泛型程式設計:高效程式設計的奧秘》一3.4 完美數

上面這個式子可以通過幂差公式推導出來:

2n-1 =(2-1)(2n-1 + 2n-2 + … + 2 + 1)

或者你也可以這麼想:用二進制數的形式來對2的幂進行連加。

習題3.5 通過等式(3.1)來證明:如果2n-1是素數,那麼n就是素數。

我們現在要按照德國著名數學家高斯(Carl Gauss)的辦法來證明定理3.3。(本書第8章還會談到高斯。)首先,把定理中的n寫為n-1,并利用等式(3.5),把其中的兩個都替換為2n-1,于是定理就變成:

如果2n-1是素數,那麼2n-1(2n-1)就是完美數。

接下來定義一個函數σ(n),用它來表示n的所有因子之和。如果n的素數分解形式是:

《數學與泛型程式設計:高效程式設計的奧秘》一3.4 完美數

那麼,我們就把指數ai的每一種組合方式都列出來,并将其運用到相應的素因子上面,這樣就可以得到n的全部因子。比方說,24的素數分解形式是23·31,是以,其各個因子是{20·30, 21·30, 22·30, 23·30, 20·31, 21·31, 22·31, 23·31}。于是,這些因子之和就是:

2030 + 2130 + 2230 + 2330 + 2031 + 2131 + 2231 + 2331 = (20 + 21 + 22 + 23)(30 + 31)

是以,我們可以把任何一個數n的所有因子之和,寫為連乘的形式:

《數學與泛型程式設計:高效程式設計的奧秘》一3.4 完美數

在推導最後一步的時候,我們運用幂差公式,對分子進行了化簡。(本例中的整數變量p,指的是素數,在本書接下來的各種證明過程中,除非另做說明,否則也将遵循這一慣例。)

習題3.6 證明:如果n與m互質(coprime,也就是沒有共同的素因子),那麼

σ(nm)= σ(n)σ(m)

(這個命題的另外一種表述方式為:σ是積性函數(multiplicative function)。)

現在我們定義這樣一個名為真因子總和(aliquot sum)的函數α(n):

α(n)= σ(n)-n

換句話說,n的真因子總和就是其所有的真因子之和,也就是除去n自身之外的那些因子之和。

現在,我們已經做好了證明定理3.3所需的準備工作,這條定理也稱為《幾何原本》第9卷第36号命題:

證明 設q = 2n-1(2n-1)。我們已經知道,2是個素數,而根據該定理所列出的條件,2n-1也是個素數,是以,2n-1(2n-1)就可以視為一種形式的素數分解,其中 m = 2, p1 = 2, a1 = n-1, p2 = 2n-1, a2 = 1。套用因子求和公式(參見等式(3.6)),可以得出:

《數學與泛型程式設計:高效程式設計的奧秘》一3.4 完美數

而根據α函數的定義,我們可以得出:

α(q)= σ(q)- q = 2q - q = q

是以,q是完美數。□

我們可以把歐幾裡得的這條定了解讀為:如果某數具備特定的形式,那它就是完美數。值得思考的地方在于,該定理的逆命題是否成立:如果某數是完美數,那麼它是否必定具備2n-1(2n-1)的形式?歐拉(Euler)在18世紀已經證明,偶完美數必定具備該形式,然而他并沒有證明那個更加通用的命題,也就是:每一個完美數都具備這樣的形式。這個問題直到今天也沒有解決,我們無法确定奇完美數是否存在。

習題3.7 證明每一個偶完美數都是三角形數。

習題3.8 證明偶完美數每個因子的倒數之和,必定是2。例如6是偶完美數,對它的4個因子分别取倒數,并将其相加,就得到:

《數學與泛型程式設計:高效程式設計的奧秘》一3.4 完美數

繼續閱讀