美文网首页
[LeetCode][Python]507.Perfect Nu

[LeetCode][Python]507.Perfect Nu

作者: bluescorpio | 来源:发表于2017-06-10 14:03 被阅读377次

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)

思路:

  1. 首先,当然要知道如何得到一个数的divisiors,或者得到一个数是完全数。最简单粗暴的方法,从1到这个数依次看能否被这个数整除。
    def checkPerfectNumber(self, num):
    """
    :type num: int
    :rtype: bool
    """
    sum = 0
    for i in xrange(1, num):
    if (num%i==0):
    sum += i
    if(sum==num):
    return True
    else:
    return False
    但是不幸,在num很大的情况下超时了。
    继续分析:28 = 1 + 2 + 4 + 7 + 14
    对于2,满足条件,则28/2=14也满足条件,4满足条件,则28/4也满足条件。
    所以可以对数字从2到sqrt(num)进行查看,如果满足取模运算为0,则把这个数和num除以这个数的值放到sum里面去。判断是否和num相等即可。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class Solution(object):
    def checkPerfectNumber(self, num):
        """
        :type num: int
        :rtype: bool
        """
        sum = 0
        for i in xrange(1, num):
            if (num%i==0):
                sum += i
        if(sum==num):
            return True
        else:
            return False

    def checkPerfectNumber2(self, num):
        total, i = 1, 2
        while i*i < num:
            if num%i==0:
                total += i + num/i
            i+=1
        return num>1 and total==num

    def checkPerfectNumber3(self, num):
        if num<=1:
            return False
        sum = cur = 1
        while cur<int(num**0.5):
            cur+=1
            if(num%cur == 0):
                sum += cur + num/cur
        return sum == num

if __name__ == '__main__':
    sol = Solution()
    print sol.checkPerfectNumber(6)
    print sol.checkPerfectNumber(28)
    print sol.checkPerfectNumber(1234)

    print sol.checkPerfectNumber2(28)

    print sol.checkPerfectNumber3(28)

    print sol.checkPerfectNumber3(6)

相关文章

网友评论

      本文标题:[LeetCode][Python]507.Perfect Nu

      本文链接:https://www.haomeiwen.com/subject/uxoqqxtx.html