题目描述
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
输入描述:
输入一个偶数
输出描述:
输出两个素数
示例:
输入:20
输出:
7
13
思路:从给定偶数的一半值开始向两边搜索,搜索到的第一对素数即为差值最小的素数对
代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int num = sc.nextInt();
int mid = num / 2;
for(int i = 0; mid - i > 0 && mid + i < num; i++){
if(isPrime(mid - i) && isPrime(mid + i)){
System.out.println(mid - i);
System.out.println(mid + i);
break;
}
}
}
sc.close();
}
private static boolean isPrime(int n){
if(n == 2 || n == 3) return true;
if(n % 6 != 1 && n % 6 != 5) return false;
for(int i = 5; i * i <= n; i += 6){
if(n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
}