题解 | #完全数计算#
完全数计算
https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
方法一:暴力算法 Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int count = 0; for (int i = 2; i <= n; i++) { int sum = 0; for (int j = 1; j < i; j++) { if (i % j == 0) { sum += j; } } if (sum == i) { count++; } } System.out.println(count); scanner.close(); 方法二:优化算法 Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int count = 0; for (int i = 2; i <= n; i++) { int sum = 1; for (int j = 2; j * j <= i; j++) { if (i % j == 0 && i % j != j) { //短路与,不整除直接过 //遍历到根号j即可 sum = sum + j + i / j; } else if (i % j == j) { sum += j; } } if (sum == i) { count++; } } System.out.println(count); scanner.close();