#44500: 不要真的直接去算題目給的公式,然後又自己慢慢因數分解判斷那個 p 是否真的是完美數


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-05-10 17:41:09
e653. 10490 - Mr. Azad and his Son!!!!! -- UVA | From: [123.192.228.253] | 發表日期 : 2024-12-11 00:55

硬算的話你會得到一個大到靠北的數字,也不是完全不行,但很耗時

 

預防萬一有人不知道什麼是完美數,完美數又稱完全數,如果某個數字的所有真因數的和(包含1, 但不包含自己),剛好等於該數字本身,那我們會稱呼這個數字為完美數。

 

題目給的公式 (2^(k-1))*(2^k - 1) 是用來計算完美數的公式,當 k 滿足特定條件時,代入這個公式就會得到完美數

所以只需要判斷 k 是否滿足條件即可,不要真的每個數字都代進去看看,更別真的做因數分解

 

這個條件就是 k 必須要是梅森質數

梅森質數是特殊的質數,若有一個質數 n ,同時 2^n-1 也是質數,那我們就會說 n 是梅森質數

 

例如 2 是質數,同時 2^2-1 = 3 也是質數,所以 2 就是梅森質數

 

把 2 這個梅森質數代進去題目給的公式,可得 (2^(2-1))*(2^2-1) = 6

6 的真因數為 1, 2, 3,總和等於 6 本身

所以當輸入的值為 2 時,確實可以得到一個完美數 6

 

所以只需要檢查題目給的數字是否是質數、是否是梅森質數即可,如果條件滿足,這時才需要真的把數字代入題目的公式

 

參考資料: 

A000396 - OEIS (完美數)

A000043 - OEIS (梅森質數)

 

 
ZeroJudge Forum