题解 | #完全数计算#
完全数计算
https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int n = in.nextInt();
//第一个完全数是6,若小于6则输出0,这段代码是刻有可无得,毕竟在我们程序没有
//运行之前,我们不得而知第一个完全数是几,这完全是我们心算的结果
if (n < 6) {
System.out.println(0);
continue;
}
int count = getCount(n);
//输出结果
System.out.println(count);
}
}
private static int getCount(int n) {
int count = 0; //计数变量
for (int t = 6; t <= n; t++) {
int sum = 0;
//统计因数的和,重点是找到这个数的全部因数然后求和,计算因素的方法有一个技巧,假设该数为n,不从遍历1-n去测试变量是否为n的约数,
//而是迭代到1到该数的平方根即可,因为一个数如果存在因数,那么他的最小因数一定是小于自身平方根的,而对应的另外一个因数
//则肯定会大于自身平方根,所以我们只需要找出较小的那一个因素,然后用n对较小的因素取整得到另外一个因素,
//那么计算因素的和只需要用两个因素相加并累计结果即可,但是完美数要排除自身,为了代码简单起见,我们可以从2开始找因素,找完之后用
//累计的和直接+1即可判断是否是完美数
for (int i = 2; i <= Math.sqrt(t); i++) {
if (t % i == 0) {
sum = sum + i + t / i;
}
}
if (sum + 1 == t)
count++;
}
return count;
}
}