题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { // 注意 while 处理多个 case int n = in.nextInt(); //题目要求输入的数值 int differ = n-1; //定义两个素数的最大差值 int index = 0; //定义一个全局变量,用于记录满足最小差值的坐标 List<Integer> list = new LinkedList<>(); for(int i=2;i<n;++i){ //输入的数不可能是素数,因为输入的数一定是偶数。 从2开始,因为1不满足题意 list.add(getCommonFactors(i)); //将每一个可能的素数装入其中; } Arrays.sort(new List[]{list}); //按获得的素数的大小排序 Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()){ if(iterator.next().equals(0)){ //把没用的0去除掉 iterator.remove(); } } List<Integer> list1 = new LinkedList<>(); //用于保留两素数和为输入数的list for(int x=0;x<list.size();++x){ for (int y=0;y<list.size();++y){ while (list.get(x) + list.get(y) == n) { //判断条件为两素数和为输入数 list1.add(list.get(x)); list1.add(list.get(y)); break; } } } System.out.println(list1); for(int j=0;j<list1.size();j=j+2){ //每两对两对之间进行比较,其实只需要比较一半;因为后一半都是负数。 while (j<list1.size()-1){ if(list1.get(j+1) - list1.get(j) < differ && list1.get(j+1) - list1.get(j) >=0){ differ = list1.get(j+1) - list1.get(j); index =j; } break; } } System.out.println(list1.get(index)); System.out.println(list1.get(index+1)); } } public static int getCommonFactors( int a){ //判断是否为素数,并返回该素数值 int b = 1; int c = -1; int t = a; //保存最初传入的值 int res = 0; ArrayList<Integer> integers = new ArrayList<>(); //存放要判断的素数的因数; for(int i=2;i<=a;++i){ //从2开始,因数的下标不是1的就是非素数 while (a%i == 0){ integers.add(i); break; } } if(integers.size()<2){ //从2开始,因数的下标不是1的就是非素数 return t; }else { return 0; } }