A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

各位大神,编程怎么解决啊?

7 个回复

倒序浏览
题目:一个偶数总能表示为两个素数之和。
回复 使用道具 举报
好像不是所有的偶数都可以啊[mw_shl_code=java,true]import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import org.omg.CORBA.PUBLIC_MEMBER;

/**
* 将一偶数变成两素数之和
* 思路
* 获取偶数
* 获取小于它的素数List
* 遍历相加以验证
* @author Administrator
*
*/
public class OuShuHuanChengLiangSuShuHe {
/**
* 素数集合
*/
        List<Integer> listOfSuShu;
        /**
         * 构造器,初始化listOfShuSu
         */
        public  OuShuHuanChengLiangSuShuHe(){
                this.listOfSuShu=new ArrayList<Integer>();
        }
        /**
         * main
         */
        public static void main(String[] args) {
                int check=2;
                do{OuShuHuanChengLiangSuShuHe it=new OuShuHuanChengLiangSuShuHe();
                        System.out.print("请输入一偶数:");
                        Scanner input=new Scanner(System.in);
                        int ouShu=input.nextInt();
                        it.listOfSuShu=it.getSuShu(ouShu);
                        List<Integer>result=it.change(ouShu, it.listOfSuShu);
                        //打印输出结果
                        if(result.size()==0){
                                System.out.println("该数不可以转换");
                        }else{
                                System.out.print(ouShu+"可以由下面数字相乘得来:");
                                for(int i:result){
                                        System.out.print(i+" ");
                                }
                                System.out.println();
                        }
                        System.err.println("是否继续(1.是 2.否)");
                        do{check=input.nextInt();
                        if(check==1||check==2){
                                break;
                        }
                        System.out.print("输入错误,重新输入:");
                        }while(true);
                }while(check==1);
        }
        /**
         * 获取素数
         */
        public List<Integer> getSuShu(int oushu) {
                List<Integer> sushus=new ArrayList<Integer>();
                class Inner{
                        boolean check(int m){
                               for(int j=2;j<m;j++){
                                            if(m%j==0){
                                                return false;
                                        }
                                }return true;
                        }
                        }
                Inner inner=new Inner();
                for(int i=1;i<oushu;i++){
                        if(inner.check(i)){
                                sushus.add(i);
                        }
                        }

                System.out.print("小于"+oushu+"的素数如下所示");
                for(int i:sushus){
                        System.out.print(i+" ");
                }
                System.out.println();
                return sushus;
        }
        /**
         * 获取可以转换的素数
         * @param oushu
         * @param list
         * @return
         */
        public List<Integer> change(int oushu,List<Integer> list){
                List<Integer>result=new ArrayList<Integer>();
                for(int i=0;i<list.size();i++){
                        for(int j=0;j<list.size()&&j!=i;j++){
                                if(oushu==list.get(i)*list.get(j)){
                                        result.add(list.get(i));
                                        result.add(list.get(j));
                                }
                        }
                       
                }
                return result;
        }

}
[/mw_shl_code]
回复 使用道具 举报
编程要是能解决,哥德巴赫猜想不就证明出来了,实际上只能无限的穷举而得不到反例
回复 使用道具 举报
不能证明总是,但是可以把你输入的整数的两个质数和的情况试出来。有需要可以自行将int i改为键盘录入。

[mw_shl_code=java,true]public class Practice {
        public static void main(String[] args) {
                int i = 80;
num1:        for(int num1 = 1;num1 < i;num1++) {                //num1从1到i
                        if(num1 >= 4)                                        {
                                for(int x = 2;x <= num1 / 2; x++) {        //判断num1是否为质数
                                        if(num1 % x == 0) {
                                                continue num1;                                //num1不是质数,跳到下一个num1;
                                        }
                                }
                        }
num2:                for(int num2 = 1;num2 < i;num2++) {        //num2从1到i
                                if(num2 >= 4) {
                                        for(int x = 2;x <= num2 / 2; x++) {//判断num2是否为质数
                                                if(num2 % x == 0) {
                                                        continue num2;                                        //num2不是质数,跳到下一个num2;
                                                }
                                        }
                                }
                                if(num1 + num2 == i) {                        //num1与num2之和为i,就输出
                                        System.out.println(i + "=" + num1 + " + " + num2);
                                }
                        }
                }
        }
}
[/mw_shl_code]
回复 使用道具 举报
坚持努力wbj 发表于 2016-8-26 09:56
好像不是所有的偶数都可以啊[mw_shl_code=java,true]import java.util.ArrayList;
import java.util.List;
...

这个题目就是哥德巴赫猜想???历史性难题!!!
回复 使用道具 举报
存在即合理。。。曾经的班主任说!
回复 使用道具 举报
小蔡@¥¥¥ 发表于 2016-8-26 21:47
这个题目就是哥德巴赫猜想???历史性难题!!!

不知道,离开学校太久了,哥德巴赫猜想是什么都忘了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马