完数
【题目】
一个数的因子就是所有可以整除这个数的数,不包括这个数自身。比如,6的因子是1,2,3
一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如6=1+2+3
请编写一个函数,入参是一个正整数n,返回值是0到n之间(闭区间)的完数的个数
【难度等级】
简单
【示例】
* 示例 1:
输入:num = 28
输出:5
解释:28 = 1 + 2 + 4 + 7 + 14 1, 2, 4, 7, 和 14 是 28 的所有正因子。
* 示例 2:
输入:num = 7
输出:0
【提示】
1 <= num <= 10的8次方
【代码】
public int countFactors(int num) {
int count = 0; // 因子个数
int sum = 1; //因子和
if (num < 6) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i != 0) {
continue;
}
sum = sum + i; // 当前因子相加
if (i * i != num) { // 还有num/i的因子,且不与i重复
sum = sum + num/i;
}
count++; // 统计因子个数
}
if (sum == num) { // 因子和等于当前数,即完数。返回该完数因子个数。
return count;
}
return 0;
}
浙公网安备 33010602011771号