题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
思路:将能组成这个数的两个素数存放在一个数组 arr 中,注意是一对一对的存放,并且前一个较小。
遍历 arr 数组中的每一对元素,计算它们的差值。如果当前的差值小于上一次计算的差值,那么替换差值,并重复这个过程。
直到找到差值最小的两个元素,记录至两个变量中,输出即可。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int n = in.nextInt();
int res = Integer.MAX_VALUE; //记录差值
int num1 = 0,num2 = 0; //记录输出结果的两个质数
int arr[] = new int[n+1]; //长度为 n+1 的原因是特例当 n == 4的时候。
int index = 0;
for(int i=1;i<=n/2;i++){ //遍历一半即可
if(isSu(i) && isSu(n-i)){
arr[index++] = i;
arr[index++] = n-i;
}
}
for(int i=0;i<n-1 && arr[i]!=0;i+=2){
if(arr[i+1]-arr[i] < res){ //如果当前差值小于上一次的差值
num1 = arr[i]; //记录两个变量
num2 = arr[i+1];
res = arr[i+1]-arr[i]; //更新差值
}
}
System.out.println(num1);
System.out.println(num2);
}
}
//判断一个数是否为素数
public static boolean isSu(int num){
if(num==1 || num==2) return true;
for(int i = 2;i<num;i++){
if(num % i == 0) return false;
}
return true;
}
}

查看8道真题和解析