We define the Perfect Number is a positive integer that is equal to the sum of all its positive divisors except itself.
Now, given an integer n, write a function that returns true when it is a perfect number and false when it is not.
Example:
Input: 28 Output: True Explanation: 28 = 1 + 2 + 4 + 7 + 14
Note: The input number n will not exceed 100,000,000. (1e8)
<Solution>想法如下
- 其實就是暴力解,但要會懂得減枝。當找到一個數 n1 可以整除 num,你也同時找到一個數 n2 = num / n1 可以整除 num。所以,只要檢查到 sqrt(num) 就可以了,因為 sqrt(num) * sqrt(num) = num
C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
bool checkPerfectNumber(int num) { | |
if(num <= 1) { | |
return false; | |
} | |
const int upper_bound = sqrt(num); | |
int sum = 1; | |
for(int i = 2; i <= upper_bound; i++) { | |
if(num % i == 0) { | |
sum += i; | |
sum += num / i; | |
} | |
} | |
return sum == num; | |
} | |
}; |
Java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public boolean checkPerfectNumber(int num) { | |
if(num <= 1) { | |
return false; | |
} | |
final int upper_bound = (int)Math.sqrt(num); | |
int sum = 1; | |
for(int i = 2; i <= upper_bound; i++) { | |
if(num % i == 0) { | |
sum += i; | |
sum += num / i; | |
} | |
} | |
return sum == num; | |
} | |
} |
沒有留言:
張貼留言