标题:哥德巴赫猜想java源码
只看楼主
wucaimedia
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-6-16
结帖率:100%
已结贴  问题点数:20 回复次数:2 
哥德巴赫猜想java源码
哥德巴赫猜想题目:
1742年6月7日,德国数学家哥德巴赫在写给著名数学家欧拉的一封信中,提出了两个大胆的猜想:
一、任何不小于4的偶数,都可以是两个质数之和(如:4=2+2);
二、任何不小于7的奇数,都可以是三个质数之和(如:7=2+2+3)。
用java程序写出来,要解决几个问题:
1.数值大小没有限制
2.可以永远找下去
3.如果发现有一个数不能满足哥德巴赫的思想就把他打印出来
这段代码只计算第一个题目,也就是偶数可以分为两个素数之和,第二个题目按照第一个题目的思路也很好写,大家自己发挥。可以指定一个查找的数值范围,也可以永远找下去,如果开着你的电脑发现有一天这个数被你找到了,那么恭喜你破解哥德巴赫猜想。源码如下:
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Scanner;


public class Gedebahe
{
    private BigInteger evenInteger = new BigInteger("0");//要测试的偶数,哥德巴赫规定偶数必须大于4
    private BigInteger seed = new BigInteger("2");
    private ArrayList<BigInteger> primeArr = new ArrayList<BigInteger>();//2~m的质数
   
    public static void main(String[] args)
    {
        Gedebahe test=new Gedebahe();
        BigInteger range=new BigInteger("0");
        System.out.println("请输入计算范围(0代表无限搜索):");
        Scanner s=new Scanner(System.in);
        range=new BigInteger(s.nextLine());
        s.close();
        if((new BigInteger("4"))==-1 && (new BigInteger("0"))!=0)
        {
            System.out.println("范围必须大于等于4");
            return;
        }
        boolean success=true;
        BigInteger testN=new BigInteger("2");
        do
        {
            testN=testN.add(new BigInteger("2"));
            System.out.println("正在解析 "+testN);
            success=test.decompose(testN);
        }while(success && (range)==-1 || (new BigInteger("0"))==0);
        if(success==false) System.out.println("无解");
    }


    public Gedebahe()
    {
        primeArr.add(seed);
    }

   
    public boolean decompose(BigInteger m)
    {
        evenInteger=m;
        seed = seed.nextProbablePrime();
        primeArr.add(seed);
        BigInteger a=new BigInteger("0");
        BigInteger b=new BigInteger("0");
        boolean flag=false;
        for(int i=0;i<primeArr.size();i++)
        {
            a=primeArr.get(i);
            b=evenInteger.subtract(a);
            if(((a)==1 || (a)==0) && primeArr.contains(b))
            {
                System.out.println(String.valueOf(evenInteger)+"="+String.valueOf(a)+"+"+String.valueOf(b));
                flag=true;
                break;
            }
        }
        return flag;
    }
}
搜索更多相关主题的帖子: 哥德巴赫猜想 java new System println 
2018-06-16 21:47
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:20 
厉害了

假如人生没有梦想,和咸鱼有什么区别!
2018-06-16 22:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487949-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.134704 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved