507. 完美数

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

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

示例 1:

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

示例 2:

输入:num = 7
输出:false

博主这一题的解法其实还是非常不错的,因为博主采用了递减的遍历范围

for(int i=1;i<max;i++){
        if(num%i==0){
            sum=sum+i+num/i;
            max=fmin(max,num/i);
            printf("%d %d ",i,num/i);
        }

    }

如上代码,我们遍历一个数的所有因素,可以使用这样的遍历方法,因为,我们知道每找到一个大一点的因素,那么我们最大的查找空间也应相应减少,最终解题代码如下:



bool checkPerfectNumber(int num){
    int sum=0;
    int max=num;
    for(int i=1;i<max;i++){
        if(num%i==0){
            sum=sum+i+num/i;
            max=fmin(max,num/i);
            printf("%d %d ",i,num/i);
        }

    }
    return sum-num==num?true:false;

}

更多推荐