专栏《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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)