完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
给定函数count(int n),用于计算n以内(含n)完全数的个数。计算范围, 0 < n <= 500000
返回n以内完全数的个数。异常情况返回-1
注意:为降低时间复杂度,从2到n的开方遍历。
package test; import java.util.Scanner; //完美数 public class exam08 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int num = scanner.nextInt(); System.out.println(count(num)); } } public static Boolean isPerfect(int i) { boolean isperfect = false; int sum = 0; for (int j = 1; j <= Math.sqrt(i); j++) { // 开方,降低时间复杂度 // 注意要加上另外一个对应的约数 if (i % j == 0) { sum += j + i / j; } } if ((sum - i) == i) { isperfect = true; } return isperfect; } public static int count(int n) { int sum = 0;// 完美数个数 if (n >= 0) { // 完美数不包括1 for (int i = 2; i <= n; i++) { if (isPerfect(i)) { // System.out.println(i); sum++; } } } else { sum = -1; } return sum; } }