每日一题——507. 完美数

507. 完美数

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。

给定一个 整数 n, 如果是完美数,返回 true,否则返回 false


2021年的收官之题

提前预祝各位小伙伴们新年快乐


两种方式 不过都很暴力

一种是直接像下面这样 遍历正因子累加 然后判断是否相等

需要注意只需要累加到根号num就行了 因为正因子是成对出现的

还有就是1需要直接排除

第二种就是打表

目前已知的能找到的完美数只有五个

6,28,496,8128,33550336

public class Solution {
    public bool CheckPerfectNumber(int num) {
        if(num <= 1)
        {
            return false;
        }

        int sum = 1;
        for (int d = 2; d * d <= num; d++) {
            if (num % d == 0) {
                sum += d;
                if (d * d < num) {
                    sum += num / d;
                }
                //因为正因子必然是成对出现的
                //如果后面的也累加就重复了
                //所以只要累加到sqrt(num)
            }
        }
        return sum == num;
    }
}

 

发表评论

您的电子邮箱地址不会被公开。