题解 | 完全数计算
完全数计算
https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
import java.util.Scanner; import java.util.ArrayList; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); //完全数:它所有的真因子之和为自身 int n = in.nextInt(); int sum ,cnt = 0; //完全数以6或28结尾 ArrayList<Integer> list = new ArrayList<>(); for(int i=6;i<=n;i++){ if(i%10 == 6 || i%100 == 28){ list.add(i); } } for(int x:list){ sum = 1; int m = (int)Math.sqrt(x); for(int j=2;j<=m;j++){ if(x%j==0){//数的因子分布在该数根号两边 int res = x/j; if(res == m) sum+=j;//如果等于根号,只计算一次 else{ sum+=j+res; } } } if(x==sum) cnt++; } System.out.println(cnt); } }