一、题目描述
题目:完美数
难度:简单
描述:对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数 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