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)
方法一:99ms
class Solution(object):
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
total, div = 1, 2
while div * div < num:
if num % div == 0:
total += div
if div * div != num:
total += num / div
div += 1
return num > 1 and total == num
方法二:65ms
对这个方法呵呵呵哒
class Solution(object):
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
perfect = set([6, 28, 496, 8128, 33550336, 8589869056])
return num in perfect
方法三:48ms
class Solution(object):
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
if num <= 1:
return False
total = 1
for i in range(2, int(math.sqrt(num))+1):
if num % i ==0:
total = total + i + num//i
# if total> num:
# return False
# if int(math.sqrt(num))**2 == num:
# total -= int(math.sqrt(num))
##print(total)
return total == num