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)
Solution1:(TLE)
class Solution:
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
sum = 0
for i in range(1,num):
if num%i==0:
sum +=i
if sum==num:
return True
return False
43 / 156 test cases passed.
Solution2:(TLE)
class Solution:
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
sum = 0
for i in range(1,num):
if num%i==0:
sum +=i
if sum>num:
return False
if sum==num:
return True
return False
41 / 156 test cases passed.
After optimiztion,it get even worse.
Solution3:
class Solution:
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
if num<=1:
return False
sum = 0
for i in range(2,int(num**0.5)+1):
if num%i==0:
sum += i
if i*i != num:
sum += num/i
return num-1==sum
Avoid calcuate twice.