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