完美数
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那么就是完美数。