Java语言高分悬赏:将一个偶数拆分成2个质数的和,怎么拆分,比如10=7+3

Java语言高分悬赏:将一个偶数拆分成2个质数的和,怎么拆分,比如10=7+3

问题描述:

Java语言高分悬赏:将一个偶数拆分成2个质数的和,怎么拆分,比如10=7+3

实现思路:

从第一个质数开始尝试,相减得到另一个数,再判断是否是质数。
如果另一个数为0 还是找不到两个质数,说明无法拆成目标结果。

public class EvenToPrime {
    public static void main(String[] args) {
        int num=inPut();
        outPut(num);

    }

    public static int inPut(){
        //输入数字并通过检验确定一个符合要求的数
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入大于2的偶数:");
        int num=sc.nextInt();
        if(num%2!=0||num<=2){
            System.out.println("输入错误,请重新输入大于2的偶数:");
            return inPut();//错误则返回inPut()继续输入
        }
        return num;//正确则返回num值
    }

    public static boolean isPrim(int num){
        //判断是否是质数
        for(int i=2;i<=Math.sqrt((double)num);i++){
            if(num%i==0){
                return false;
            }
        }
        return true;
    }

    public static void outPut(int num){
        //输出所有符合条件的质数对
        for(int i=2;i<=num/2;i++){
            if(isPrim(i)==true&&isPrim(num-i)==true){   
                System.out.println(num+"="+i+"+"+(num-i));
            }
        }
    }
}

任何一个大于2的偶数都可以被拆分为两个质数相加的结果。
8 = 3 + 5
10 = 5 + 5
44 = 37 + 7
编写代码,验证100以内(含)
所有大于2的偶数都可以表达成两个质数相加
public class J {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int i;
    int n1,n2;
    for(i=4;i<=100;i+=2){
        for(n1=2;n1<=i;n1++){
            if(pd(n1)==true){
                for(n2=2;n2<=i-n1;n2++){
                    if(pd(n2)==true){
                        if(n1+n2==i){
                            System.err.println(i+"="+n1+"+"+n2);
                        }
                    }else
                        break;
                }   
            }else
                break;
        }
    }
}
public static boolean pd(int n){
    int j;
    boolean f=true;
    for(j=2;j<n;j++){
        if(n%j==0){
            f=false;
        }
    }
    return f;
}

}