LeetCode Daily 2


2021-12-31 

LeetCode T507

  希望自己在新的一年里可以继续坚持刷题的习惯??!

题目描述:

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数 n, 如果是完美数,返回 true,否则返回 false

Input:

num = 28

Output:

true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 1428 的所有正因子。

解法:

若是满足题意的数字,那必然不是质数!

随后则逐个判断即可!

class Solution {
public:
    bool checkPerfectNumber(int num) {
        if(num == 1) return false;
        if(isPrime(num)) return false;
        int sum = 1;
        for(int i = 2; i < num / i; i++) {//避免成对出现的因子!这里不采用sqrt判断是因为sqrt内存消耗更多!
            if(num % i == 0) {
                sum += i + num / i;
            }
        }
        if(sum == num) return true;
        return false;
    }
    bool isPrime(int n) {
        if(n == 2) return true;
        for(int i = 2; i < sqrt(n); i++) {
            if(n % i == 0) return false;
        }
        return true;
    }
};

还有卡测试用例的骚方法 ??(图一乐)

class Solution {
    public boolean checkPerfectNumber(int num) {
        switch(num) {
            case 6:
            case 28:
            case 496:
            case 8128:
            case 33550336:
                return true;
        }
        return false;
    }
}