题目:
题解:
1.求出每个数的所有约数,判断是否为完全数。
2.循环1- ,如果能整除即为约数(约数至少两位,i*i = n,所以i的最大值为
)。
public int getPerfectNumber(int n) {
int count = 0;
for (int i = 1; i <= n; i++) {
if (isPerfectNumber(i)) {
count++;
}
}
return count;
}
private boolean isPerfectNumber(int n) {
if (n <= 1) {
return false;
}
int sum = 0;
for (int i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
sum = sum + i + n/i;
}
}
return sum == 2*n;
}
时间复杂度:O(N)