力扣每日一题之完美数

对于一个正整数,如果除了它和它自身以外的所有正因子相等,我们称他为完美数。

给定一个整数,如果是完美数,返回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

方法一:枚举

枚举num 的所有真因子,累加所有真因子之和,记作sum。若sum=num则返回true,否则返回false.

在枚举时,只需要枚举不超过$ \(的数。这是因为如果\)num\(有一个大于\) \(的因数\)d\(,那么它一定有一个小于\) $的因数 \(frac{num}{d}\).

在枚举时,若能找到一个因数\(d\),那么就找到了因数\(frac{num}{d}\).

\(d \\times d=num\)时,这两个因数相同,此时不能重复计算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func checkPerfectNumber(num int) bool {
if num == 1 {
return false
}
var sum int = 1 // 和从1开始
for d := 2; d * d <= num; d ++ {
if num % d == 0{
sum += d
if d * d < num {
sum += num /d
}
}
}
return sum == num
}