507.Perfect Number

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.

原文地址:https://www.cnblogs.com/bernieloveslife/p/9747785.html