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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。