對於一個 正整數,如果它和除了它自身以外的所有正因子之和相等,我們稱它爲“完美數”。
給定一個 正整數 n, 如果他是完美數,返回 True,否則返回 False
示例:
輸入: 28
輸出: True
解釋: 28 = 1 + 2 + 4 + 7 + 14
這個題目,所有正因子,只有一次出現,也就是 4*7 和 7*4是一樣的,只算一個4和一個7,6*6的話,也只有一個6。所以只要計算num的開平方就可以了,即比如28,開方之後只會算到4*7 而不會 計算到後面的7*4,所以不會重複的計算 (兩個7,兩個4);
對於一樣的數比如6*6,放到最後單獨計算( if(i*i == num)),而不是i <= Math.sqrt(num) 放入循環條件。因爲6*6的兩個6只算一個,所以sum只用加一次就好了。
class Solution {
public boolean checkPerfectNumber(int num) {
if(num==1) return false;
int i = 2,sum = 1; //1肯定算,不計算1了直接加進結果,
for(;i < Math.sqrt(num);i++){
if(num % i == 0){
sum += i;
sum = sum + (num/i);
}
}
if(i*i == num){
sum += i;
}
if(sum == num){
return true;
}
return false;
}
}