103、完美数

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

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

示例:

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

注意:

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

思路很简单,除了本身和其余,注意的是1应该返回false,并且循环范围可以缩小点

class Solution {
    public boolean checkPerfectNumber(int num) {
        
		if(num == 1 || num == 0){
			return false;
		}
		if(num == 2 || num == 3 || num == 4){
			return false;
		}
		int tem = num * 2;
		for (int i = 1; i * i < num ; i++) {
			if(num % i == 0){
				int j = num / i;
				tem = tem - j - i;
		
				if(tem < 0  ){
					break;
				}
				
			}
		}
		if(tem == 0){
			return true;
		}else {
			return false; 
		}
    }
}

效率还挺高的
在这里插入图片描述

排行靠前的代码

class Solution {
    public boolean checkPerfectNumber(int num) {
        return num==6||num==28||num==496||num==8128||num==33550336;
    }
}

其实这个代码利用的是
这样就可以直接判断是不是了,给出了一个优化的思路,哈哈哈哈
1e8以内只有5个完美数

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/85019769
103