1. 先求出目标值的所有的素数,并且将(素数,(target - 素数)[差值])写入map集合中
  2. 然后从map中先取得key,根据key查看value是否存在,在看value是否存在key中,就能保证key和value都是素数并且和为target
  3. 遍历并且保留map的每一对数据的最小距离即可

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 任意的两个偶数都可以由两个素数组成,求得组成偶数的两个数组的差值最小的素数对
        // 暴力解法, 先求出素数对
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            // 判断是不是素数
            int target = scanner.nextInt();
            Map<Integer,Integer> map = new HashMap<>();// 用来存放,<素数,差值>
            map.put(1,target - 1);
            map.put(2,target - 2);
            for(int j = 3;j <= target; j++) {
                boolean flag = true;
                for (int i = 2; i <= Math.sqrt(j); i++) {
                    if (j % i == 0) //  证明不是素数
                    {
                        flag = false;
                        break;
                    }
                }
                if(flag) map.put(j,target - j);
            }
            // 遍历map,用来找到最小的差值,并且查询差值是否在map的key中,如果存在,则说明其存在素数集合中
            int res1 = 0;
            int res2 = 1000000;
            for(Integer i : map.keySet()){
                // 先从map的value中寻找是否存在。
                if(map.get(map.get(i)) != null){
                    // 也就是能找到差值,我们先计算和结果相差多少。
                    if(res2 - res1 > Math.abs(map.get(i) - i)){
                        res2 = map.get(i) > i?map.get(i):i;
                        res1 = map.get(i) < i?map.get(i):i;
                    }
                }
            }
            System.out.println(res1);
            System.out.println(res2);
        }
    }
}