描述
任意一個(gè)偶數(shù)(大于2)都可以由2個(gè)素?cái)?shù)組成,組成偶數(shù)的2個(gè)素?cái)?shù)有很多種情況,本題目要求輸出組成指定偶數(shù)的兩個(gè)素?cái)?shù)差值最小的素?cái)?shù)對(duì)。
數(shù)據(jù)范圍:
輸入的數(shù)據(jù)滿足
輸入描述:
輸入一個(gè)大于2的偶數(shù)
輸出描述:
從小到大輸出兩個(gè)素?cái)?shù)
示例1
輸入:
20
輸出:
7
13
示例2
輸入:
4
輸出:
2
2
代碼
import java.util.Scanner;
/**
* @author hll[yellowdradra@foxmail.com]
* @since 2023-03-16 10:42
**/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
minDiff(in.nextInt());
}
public static void minDiff(int n) {
for (int i = n >> 1; i > 0; i--) {
if (isPrimeQuickly(i) && isPrimeQuickly(n - i)) {
System.out.printf("%s\n%s\n", i, n - i);
break;
}
}
}
public static boolean isPrimeQuickly(int n) {
if (n == 2 || n == 3) {
return true;
}
// 等價(jià)于 n % 2 == 0 即n是偶數(shù)
if ((n & 1) == 0 || n <= 1) {
return false;
}
int r = n % 6;
if (r != 5 && r != 1) {
return false;
}
int sqrt = (int) Math.sqrt(n);
// 保證i為奇數(shù)
for (int i = 5; i <= sqrt; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
}