507.完美数
题目描述
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数 n
, 如果是完美数,返回 true
;否则返回 false
。
示例1:
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。
示例2:
输入:num = 7
输出:false
解题思路
枚举不超过 n u m \sqrt{num} num的数。这是因为 n u m num num有一个大于 n u m \sqrt{num} num的因数 d d d,那么它有一个小于 n u m \sqrt{num} num的因数 n u m d \frac{num}{d} dnum。
在枚举时,若找到了一个因数 d d d,那么就找到了因数 n u m d \frac{num}{d} dnum。注意当 d ⋅ d = n u m d·d=num d⋅d=num时这两个因数相同,此时不能重复计算。
代码(Python)
class Solution:
def checkPerfectNumber(self, num: int) -> bool:
if num<=1:
return False
sum=1
for i in range(2,int(math.sqrt(num)+1)):
if num%i==0:
sum+=i+num/i
return sum==num