完美数

public boolean checkPerfectNumber(int num) {
 if (num == 1) return false;
 int sum = 1;
 for (int i = 2; i <= num / i; i++) {
     if (num % i == 0) {
         sum += i;
         if (i * i != num) sum += num / i;
     }
 }
 return sum == num;
}

  这道题可以直接用数学方法来解,答题思路是首先要找到num的所有正因子,满足条件的正因子一定是对称的,拿28举例,它有一个正因子是2,那么必然还有一个28/2=14,那么14有因子是2,它有14/2=7与之对称。我们发现只需要遍历到sqrt(num)就可以了。当然,这里有个完全平方数的特殊情况,它满足的条件是i = num/i,我们只需要排除这种情况即可。将所有找到的正因子加和,如果等于num那么就是完美数。

posted @ 2023-10-28 21:27  樱圃  阅读(15)  评论(0编辑  收藏  举报