题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
先找出所有该偶数以内的素数,放入一个数组中,然后遍历判断各个素数之和是否为该偶数,顺便记录下符合条件的两个素数的差,赋值给min,并且记录这两个素数的下标。有更小的差值则更新min和下标,最后通过下标输出这两个素数。(其实就是暴力法)
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int num = 0; for(int i = 2;i < n;i++){ int flag = 1; for(int j = 2;j < i;j++){ if(i % j == 0){ flag = -1; break; } } if(flag == 1) num++; } int[] nums = new int[num]; for(int i = 2,k = 0;i < n;i++){ int flag = 1; for(int j = 2;j < i;j++){ if(i % j == 0){ flag = -1; break; } } if(flag == 1){ nums[k] = i; k++; } } int min = 1001; int index1 = 0; int index2 = 0; for(int i = 0;i < nums.length;i++){ for(int j = i;j < nums.length;j++) if(nums[i] + nums[j] == n && Math.abs(nums[i] - nums[j]) < min){ index1 = i; index2 = j; min = Math.abs(nums[i] - nums[j]); } } if(nums[index1] > nums[index2]){ System.out.println(nums[index2]); System.out.println(nums[index1]); }else{ System.out.println(nums[index1]); System.out.println(nums[index2]); } } }
改进: