哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和
验证哥德巴赫猜想在一百万以内成立
public class Goldbach {
public static void main(String[] args) {
int number = 1000000;
boolean b;
//计算耗时
long beginTime = new Date().getTime();
//求1000000以内的质数
ArrayList<Integer> list = new ArrayList();
for (int i = 2; i < number; i++) {
b = true;
for (int j = 2; j <= Math.sqrt(i); j++) {
//判断能否被整除
if (i%j == 0) {
b = false;
break;
}
}
if (b) {
list.add(i);
}
}
int[] primeNum = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
primeNum[i] = list.get(i).intValue();
}
System.out.println("一百万以内的质数共:" + primeNum.length);
long centerTime = new Date().getTime();
//求6到1000000里的偶数
for (int i = 6; i < number; i=i+2) {
b = false;
//j+num=i,其中j为质数,若num也为质数,则猜想成立
for (int j = 1; j < primeNum.length && primeNum[j] < i; j++) {
int num = i-primeNum[j];
//验证num是否为质数
b = true;
for (int k=2; k <= Math.sqrt(num); k++) {
if (num%k == 0) {
b = false;
break;
}
}
if (b) {
break;
}
}
if (!b){
System.out.println("哥德巴赫猜想不正确");
break;
}
}
long endTime = new Date().getTime();
System.out.println("耗时:" + (endTime-beginTime));
System.out.println("求质数耗时:" + (centerTime-beginTime));
System.out.println("验证猜想耗时:" + (endTime-centerTime));
}
}