Python|Leetcode《507》|完美数

Python|Leetcode《507》|完美数,第1张

Python|Leetcode《507》|完美数

专栏《LeetCode|一刷到底》
打卡每天leetcode精选每日一题(尽量不断更!)

点击关注不迷路!!!

一、题目描述
  • 题目:完美数
  • 难度:简单
  • 描述:对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
    给定一个 整数 n, 如果是完美数,返回 true,否则返回 false
  • 示例1

输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。

  • 示例2

输入:num = 6
输出:true

  • 示例3

输入:num = 496
输出:true

二、题目解析

本题的常规解题思路在于判断能够乘得给定数值的两个因子中小的因子的最大值为多少,解释如下:
以数字36为例,可以拆解的因子如下(本身不算):

  • 2*18
  • 3*12
  • 4*9
  • 6*6

当对36进行开方得到6*6的时候,小的因子的最大值为6,因此我们只需要遍历每个数据的开方数为次数,计算能够整除时的因子数即可。最后全部遍历完成,进行最终的加法判断。

三、解题代码

解法(一)

class Solution:
    def checkPerfectNumber(self, num: int) -> bool:
        if num <= 0 or num == 1:
            return False
        lst = [1]
        for i in range(2, ceil(sqrt(num))):
            if num % i == 0:
                lst.append(i)
                lst.append(num / i)
        if sum(lst) == num:
            return True
        return False

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存