题解 | #完全数#

完全数计算

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();
    }
}
全部评论

相关推荐

03-28 16:43
佛山大学 Java
不知该咋办:简历2.0,各位佬看看,这样可以吗查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务