Perfect Number 完美數

麥田裡的哈士奇發表於2018-11-14

對於一個 正整數,如果它和除了它自身以外的所有正因子之和相等,我們稱它為“完美數”。

給定一個 正整數 n, 如果他是完美數,返回 True,否則返回 False

示例:

輸入: 28
輸出: True
解釋: 28 = 1 + 2 + 4 + 7 + 14

注意:

輸入的數字 n 不會超過 100,000,000. (1e8)

思路:首先一個數的除因子(如果不考慮被除和除的關係的話,只用找到開方即可,比如:27,除因子只用找到:根號27=5.3=5,因為對於每一字除因子,都有對應的配對組合,比如:3和9,1和27),這是第一層優化。第二層優化是把這些除因子都加起來(包括自身,因為27/1=27,1和27都是除因子),如果總和sum等於2倍的自身,那麼就是完美數。

參考程式碼:

class Solution {
public:
    bool checkPerfectNumber(int num) {
        if (num <= 0) return 0;
        int sum = 0;
        for (int i = 1; i*i <= num; i++) {
            if (num%i == 0) {
                sum += i;
                if (i*i != num) sum += (num / i);
            }
        }
        return sum == 2 * num;
    }
};

 

 

 

相關文章