0
点赞
收藏
分享

微信扫一扫

面试题:【偶数的素数和,输出最小素数差】

DYBOY 2022-01-09 阅读 20
leetcode

题目描述:偶数由两个素数构成,且素数差值最小。
比如:
输入:20
输出:7 13

思路:
1、编写求素数的方法。
2、求出偶数的所有素数,放入Map集合中。
3、遍历集合求出差值最小的。

1、编写求素数的方法。

    /***
     * @param num
     * @return true为素数
     */
    public boolean isPrimeNumber(int num) {
        boolean flag = true;
        if(num==1) {
            flag = false;
        }else if(num==2){
            flag = true;
        }else {
            for(int i=2;i<num;i++) {
                if(num%2==0) {
                    flag = false;
                }
            }
        }
        return flag;
    }

2、求出偶数的所有素数,放入Map集合中。

     /**
     * @param num
     * @return
     */
    public Map<Integer, Integer> getAllPrime(int num) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 2; i < num; i++) {
            if (isPrimeNumber(i) && isPrimeNumber(num - i)) {
                map.put(i, num - i);
            }
            if(map.containsKey(map.get(i))) {
                map.remove(i);
            }
        }
        return map;
    }

3、遍历集合求出差值最小的。

  public List<Integer> getRes(int evenNumber) {
        List<Integer> list = new ArrayList<>();
        Map<Integer, Integer> map = getAllPrime(evenNumber);// 7  13  17  3
        int res = -1;
        int temp = 0;
        for (int key : map.keySet()) {
            Integer val = map.get(key);
            //差值
            int num = getNum(key, val);
            if (res == -1) {
                res = num;
                temp = key;
            } else {
                res = res < num ? temp : key;
            }
        }
        list.add(res);
        list.add(map.get(res));
        return list;
    }

    /**
     * 求两个数的差值
     * @param a
     * @param b
     * @return
     */
    public int getNum(int a, int b) {
        if (a > b) {
            return a - b;
        }
        return b - a;
    }

测试:

 public static void main(String[] args) {
        Test2 test2 = new Test2();
        List<Integer> res = test2.getRes(20);
        System.out.println(res);
}
举报

相关推荐

0 条评论