任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,
本题要求输出组成指定偶数的两个素数差值最小的素数对。
数据范围:输入的数据满足4<=n<=1000
输入描述:输入一个大于2的偶数
输出描述:从小到大的两个素数
示例1:
输入20
输出7 13
示例2:
输入4
输出2 2
import java.util.*;
public class Main{
//判断是不是素数-通过
public static boolean isSs(int x){
//素数——除了1和它本身没有其他数可以整除
if(x==0||x==1){
return false;
}
for(int i=2;i<x;i++){
if(x%i==0){
return false;
}
}
return true;
}
//找小于n的 素数差值最小 素数对
public static void func(int n){
int min=n;//表示素数对最小差值,这里赋值n只是为了后面比较时可以直接把tmp放进去
ArrayList<Integer> arrayList=new ArrayList<>();//存放素数
for(int i=2;i<n;i++){//1不是素数,我们这里节约资源 素数判断从2开始
if(isSs(i)&&isSs(n-i)){//能放入的都是一对能组成n的数
arrayList.add(i);
}
}
int x=0;//标记最小素数对中较小者的下标
int y=0;//arraylist长度
if(arrayList.size()%2==0){
y=arrayList.size();
}else{//arraylist.size为什么会等于奇数?除了一对一对进来的,还有可能是本身,就比如118,它的素数对还有59和59
y=arrayList.size()+1;
}
for(int i=0;i<y/2;i++){
//y里面都是能构成n的对
//y/2就是有几对符合构成n的素数,
if(n-arrayList.get(i)-arrayList.get(i)<min){
min=n-arrayList.get(i)-arrayList.get(i);
x=i;
}
}
System.out.println(arrayList.get(x));
System.out.println(n-arrayList.get(x));
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
func(n);
}
}