题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
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;
}
}


查看12道真题和解析