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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

7 个回复

倒序浏览
题目:一个偶数总能表示为两个素数之和。
回复 使用道具 举报
好像不是所有的偶数都可以啊
[Java] 纯文本查看 复制代码
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;
	}

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

[Java] 纯文本查看 复制代码
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);
				}
			}
		}
	}
}
回复 使用道具 举报
坚持努力wbj 发表于 2016-8-26 09:56
好像不是所有的偶数都可以啊[mw_shl_code=java,true]import java.util.ArrayList;
import java.util.List;
...

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

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