跳至正文

每日一题——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;
    }
}

 

发表评论

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