leetcode-507:完美数

简介: leetcode-507:完美数

题目

题目链接

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

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

示例 1:

输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。

示例 2:

输入:num = 6
输出:true

示例 3:

输入:num = 496
输出:true

示例 4:

输入:num = 8128
输出:true

示例 5:

输入:num = 2
输出:false

解题

方法一:模拟

参考链接

通过这种方式,可以将时间复杂度从O(n)压缩到O(n \sqrt{n}n)

注意正因子,不能是自身。

class Solution {
public:
    bool checkPerfectNumber(int num) {
        if(num==1) return false;
        int res=1;
        for(int i=2;i*i<=num;i++){
            if(num%i==0){
                res+=i;
                if(i*i<num){
                    res+=num/i;
                }
            }
        }
        return res==num;
    }
};
相关文章
|
6月前
leetcode:414. 第三大的数
leetcode:414. 第三大的数
29 0
|
6月前
leetcode-414:第三大的数
leetcode-414:第三大的数
37 0
|
1月前
acwing 789 数的范围
acwing 789 数的范围
17 4
|
存储 算法
LeetCode-306 累加数
LeetCode-306 累加数
|
6月前
|
C语言
leetcode:191. 位1的个数
leetcode:191. 位1的个数
25 0
|
6月前
|
算法
leetcode-306:累加数
leetcode-306:累加数
32 0
|
6月前
leetcode-287:寻找重复数
leetcode-287:寻找重复数
31 0
|
6月前
leetcode-1610:可见点的最大数目
leetcode-1610:可见点的最大数目
36 0
【剑指offer】-和为S的两个数-38/67
【剑指offer】-和为S的两个数-38/67