题目
难度:★☆☆☆☆
类型:数学
对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。
给定一个 正整数 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倍
如有疑问或建议,欢迎评论区留言~