题解 | #完全数#
完全数计算
http://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
Code:
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// compute perfect num
int perfectNumCount = 0;
int upperBound = 500000;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
// 奇数不会是完全数.
for (int num = 2; num < upperBound; num += 2) {
int total = 0;
for (int i = 2; i < Math.sqrt(num); i++) { // 判断小于sqrt(x)就可以了.
if (num % i == 0) {
// 加起来判断是否是完全数
// 28 / 4 = 7 所以 要把4 + 7
total = total + i + num / i;
}
}
if (total == num - 1) {
// 缓存起来,方便查询用.
map.put(++perfectNumCount, num);
}
}
// 开始处理业务
Scanner sc = new Scanner(System.in);
int currentNum = 0;
while (sc.hasNext()) {
currentNum = sc.nextInt();
// 判断是不是比最大的完全数还要大.
if (map.get(perfectNumCount) < currentNum) {
System.out.println(perfectNumCount);
}
for (int i = 1; i <= perfectNumCount; i++) {
if (map.get(i) > currentNum) {
System.out.println(i-1);
break;
}
}
}
// 把流关闭
sc.close();
}
} 
