package math;
/*哥德巴赫猜想是说任何一个大于2的偶数都能表示为两个素数之和。请编写一个java程序验证1~100内哥德巴赫赫猜想的正确性,
* 也就/是近似证明哥德巴赫猜想
*/
public class Guess {
public static void main(String[] args){
System.out.println("在1~100范围内,现在开始哥德巴赫猜想:");
if(Testifty_Guess(1,100)){
System.out.println("在1~100范围内,哥德巴赫猜想是正确的");
}else{
System.out.println("哥德巴赫猜想是错误的");
}
}
private static boolean Testifty_Guess(int low, int high) {
// 判断1~100范围内的所有偶数是否符合哥德巴赫猜想,符合则返回true,反之则返回false
int i,j=0;
boolean flag=true;
for(i=low;i<=high;i++)
if(i%2==0&&i>2)//d 1~100之间选取大于2的偶数进行猜想测试
if(isGoldbach(i)){
j++; //j用来控制输出格式,每行输出5个数据
if(j==5){
System.out.println();
j=0;
}
}else{
flag=false;
break;
}
return flag;
}
public static boolean isGoldbach(int a){ //判断参数a是否符合哥德巴赫猜想
int i;
boolean flag=false;
for(i=1;i<=a/2;i++){
if(isPrime(i)&&isPrime(a-i)){ //根据试题分析中的表达式,传入相关的两个参数
flag=true;
System.out.print(a+"="+i+"+"+(a-i)+" ");
break;//只要有一个符合条件的就可以退出循环,判断下一个偶数
}
}
return flag;
}
public static boolean isPrime(int i){
//判断参数i是否是素数,是则返回true反之则返回false
int n;
boolean flag=true;
if(1==i){ //1本身不是素数,因此需把这个特殊的数字抛出
flag = false;
for(n=2;n<=i-1;n++)/*判断i是否是素数的一个方法是看2~i-1之间有其因子 (能被2整除),
有则不上素数返回false,反之则返回true
*/
if(i%n==0){
flag=false;
break;
}
}
return flag;
}
}