题目:找出组成一个大于2的偶数最接近的两个素数。
比如 输入20 输出7 13
注意:这里有一个理论,任意一个大于2的偶数,都能找到2个素数,相加等于这个偶数。
public class Demo10 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int[] number = getNumber(a);
System.out.println(number[0]);
System.out.println(number[1]);
}
}
private static int[] getNumber(int num) { // 获取两个最接近的素数
if (num % 2 != 0 || num <= 2) {
throw new IllegalArgumentException("参数错误");
}
int initdiff = num;
for (int i = 2; i < num; i++) {
if (isSushu(i) && isSushu(num - i) && num >= (2 * i)) {
int diff = num - 2 * i;
if (diff < initdiff) {
initdiff = diff;
}
}
}
int num1 = (num - initdiff) / 2;
int num2 = num - num1;
int[] res = new int[2];
res[0] = num1;
res[1] = num2;
return res;
}
private static boolean isSushu(int num) { // 判断是否素数
if (num <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
如果大家需要视频版本的讲解,欢迎关注我的B站: