题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
import java.util.Scanner;
/**
* @author sqwangdc
* @date 2024/6/16
* @Description HJ60 查找组成一个偶数最接近的两个素数
* 穷举:
* 从给定数的中间开始向两边枚举,mid=n/2,先判断mid本身是不是素数,如果是就直接输出mid, n-mid,例如:34,
* 如果mid本身不是素数,则mid不断+1再尝试(此时,如果mid+1是素数,还需要判断n-mid是否是素数,不能直接输出mid,n-mid),直到找到 mid以及n-mid都为素数的情况,然后输出,这样可以保证两数的差距最小
*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
findSum(n);
}
private static void findSum(int n) {
int mid = n / 2;
// 1.先判断mid是不是素数,如果是,输出 mid、 mid
// 调用判断素数函数
boolean primeNumber = isPrimeNumber(mid);
if (primeNumber) {
System.out.println(mid);
System.out.println(mid);
return;
}
// 2.如果 mid不是素数,mid+1,再判断是不是素数,如果是,输出 mid+1,n-(mid+1),如果不是,mid再+1,然后再判断是不是素数...
// (一个偶数最多+3就会变成素数)
for (int i = 1; i < n / 2; i++) {
mid = mid + 1;
boolean primeNumber1 = isPrimeNumber(mid);
boolean primeNumber2 = isPrimeNumber(n - mid);
if (primeNumber1 && primeNumber2) {
System.out.println(n - mid);
System.out.println(mid);
return;
}
}
}
private static boolean isPrimeNumber(int mid) {
if (mid == 1 || mid == 2 || mid == 3) {
return true;
}
for (int i = 2; i < mid / 2; i++) {
if (mid % i == 0) {
return false;
}
}
return true;
}
}

