题解 | #完全数#
完全数计算
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(); } }