哥德巴赫猜想题目:
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(range.compareTo(new BigInteger("4"))==-1 && range.compareTo(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 && testN.compareTo(range)==-1 || range.compareTo(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((b.compareTo(a)==1 || b.compareTo(a)==0) && primeArr.contains(b))
{
System.out.println(String.valueOf(evenInteger)+"="+String.valueOf(a)+"+"+String.valueOf(b));
flag=true;
break;
}
}
return flag;
}
}
转载于:https://my.oschina.net/u/3888195/blog/1831389