思路: 1,首先确定素数的判断条件,判断i是否是素数的一个方法是看2~i-1之间有其因子(能被2整除),有则不是素数(1本身不是素数)isPrime
2,一个任意偶数m可以写成:m=1+(m-1);m=2+(m-2);m=3+(m-3);.....m=m/2+m/2...后面和前面又一样了
3,所以只需要判断从1到m/2中有一个素数,及剩下的数也是素数就说明这个是符合哥德巴赫猜想(用函数) isGoldbach
4,来设置一个函数,在1~200中取出偶数,来进行上面1,2操作Testify_Guess
5,这题函数尽量返回值是boolean类型,因为有很多条件判断!
public class Test3 {
public static void main(String[] args) {
System.out.println("\n在1~200范围内,现在开始证实哥德巴赫猜想:");
if (Testify_Guess(1, 200)) {
System.out.println("\n在 1~200范围内,哥德巴赫猜想是正确的。");
} else {
System.out.println("\n哥德巴赫猜想是错误的");
}
}
//函数1(给定一个数判断是否为素数)
public static boolean isPrime(int i) {
boolean flag = true; //先定义一个初始变量true
if(i == 1) {
flag = false; //先判断1,1不是素数
}
for(int n = 2;n<= i-1;n++) {
if(i%n == 0) {
flag = false; //然后从2开始,看2到你给的数字i-1之间是否有i的因子,如果有,直接改false,然后退出循环
break;
}
}
return flag;
}
//函数2(判断从1到m/2中是非否有一个素数,以及判断出这个素数后剩下的数范围中是否还有一个素数,这样就可以看成这个数m是两个素数相加了)
//歌德巴赫猜想
public static boolean isGoldbach(int m) {
boolean flag = false;
for(int i = 1;i<= m/2;i++) {
if(isPrime(i) && isPrime(m-i)) {
flag = true;
System.out.print(m + "=" + i + "+" + (m-i) +" "); //不换行,用空格隔开
break;
}
}
return flag;
}
//函数3 验证哥德巴赫,1~200内的所有偶数是不是都是两个素数相加
public static boolean Testify_Guess(int min,int max) {
boolean flag = true;
int j = 0;
for(int i = min;i<= max;i++) {
if(i%2 == 0 && i>2) { //在min和max中选取偶数进行操作,i>2是因为1除2也等于0
if(isGoldbach(i)) {
j++; // 控制行,每10个换一行
if(j == 10) {
System.out.println();
j = 0;
}
}else {
flag = false;
break;
}
}
}
return flag;
}
结果:
结语:
进来的小伙伴一定会实现你们的目标的!一起加油!