dabocaiqq
2020-03-28 13:51
采纳率: 66.6%
浏览 327

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 毕小宝 2020-04-21 11:07
    已采纳

    实现思路:

    从第一个质数开始尝试,相减得到另一个数,再判断是否是质数。
    如果另一个数为0 还是找不到两个质数,说明无法拆成目标结果。
    
    
    点赞 打赏 评论
  • 孔明垂钓 2020-03-28 14:35
    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));
                }
            }
        }
    }
    
    
    点赞 打赏 评论
  • qq_23303917 2020-03-31 17:05

    任何一个大于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;
    }
    

    }

    点赞 打赏 评论

相关推荐 更多相似问题