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