507. 完美数(Python)

题目

难度:★☆☆☆☆
类型:数学

对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。

给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False

注意

输入的数字 n 不会超过 100,000,000. (1e8)

示例

输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14

解答

这道题与求一个数的因子很类似,这里我们通过求取一个数的因子和,判断一个数是否是完美数。这里需要注意的是,求因子和的过程中,可能会把该数本身也加载因子和中,所以最终的因子和是完美数的两倍。

class Solution:
    def checkPerfectNumber(self, num: int) -> bool:
        def get_divisor_sum(n):
            if n < 2:                           # 首先要有因子
                return -1                       # 如果没有,返回-1
            s = 0                               # 结果
            for i in range(1, int(n**0.5)+1):   # 遍历
                if n % i == 0:                  # 如果能整数
                    s += i                      # s+i
                    s += n // i                 # 加上另一个因数
            return s

        return get_divisor_sum(num) == num * 2  # 因为函数也加了输入数字本身,所以是2倍

如有疑问或建议,欢迎评论区留言~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容