题目描述:
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
本题含有多组样例输入。要注意多组样例输入
分析;
此题目要求对一个偶数进行质数加和分解,首先想到的就是,这个偶数/2之后得到的是否是一个质数
当前得到的两个因子如果是质数,那一定是差最小的质数,因为相等
如果当前得到的不是质数,就需要对这两个数进行判断,
- 假设得到两个因子为a和b,
- a在最开始和b相等,
- 需要得到差最小的两个质数,就得对a+1,对b-1,这样一增一减进行逐个的判断其是否为质数,
- 若增减之后还不为质数,就重复这个过程,知道a,b都为质数,就停止,
这样就获得了两个差最小的质数
代码示例:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int a = sc.nextInt();
List<Integer> list = DecomposeEven(a);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
sc.close();
}
public static List<Integer> DecomposeEven(int n){
int a = n/2;
int b = a;
while(!JudgePrimeNum(a)||!JudgePrimeNum(b)){
a--;
b++;
}
List<Integer> list = new LinkedList<Integer>();
list.add(a);
list.add(b);
return list;
}
public static boolean JudgePrimeNum(int a){
for(int i = 2;i<a;i++){
if(a%i==0){
return false;
}
}
return true;
}
}