507-完美数

2019-12-06  本文已影响0人  饮酒醉回忆

完美数

题目

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

给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False

示例:

输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14

提示:

输入的数字 n 不会超过 100,000,000. (1e8)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/perfect-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

比较简单的思路就是找到整数n的所有正因子并求和.

而数学上有对应的公式,套进来解决的话会更简单

代码

简单思路

class Solution {
    public boolean checkPerfectNumber(int num) {
        if(num <= 0){
            return false;
        }
        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 == num*2;
    }
}

领扣官方思路,数学公式

public class Solution {
    public int pn(int p) {
        return (1 << (p - 1)) * ((1 << p) - 1);
    }
    public boolean checkPerfectNumber(int num) {
        int[] primes=new int[]{2,3,5,7,13,17,19,31};
        for (int prime: primes) {
            if (pn(prime) == num)
                return true;
        }
        return false;
    }
}

作者:LeetCode
链接:https://leetcode-cn.com/problems/perfect-number/solution/wan-mei-shu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
上一篇下一篇

猜你喜欢

热点阅读