开始的时候不知道,我还想呢,这就是哥德巴赫猜想吗?后来一百科得知这是世界近代三大数学难题之一。这就比较厉害了哈,瞬间感觉头秃!感觉自己懂得好少,但是到了现在你除了加油努力就别无他选了!啊哈!
题目
输入一个大于6的偶数,请输出这个偶数能被分解为哪两个质数的和。如:10=3+7 12=5+7
要求:两个人一组合作完成。一个人负责把一个整数n拆分成两个整数的和,另一个人负责写一个函数,判断某一个整数a是质数。
普通版函数
//质数的校验
//普通的方法判断是否质数
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
public static boolean isPrime(int i) {
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
return false;
}
}
return true;
}
优化版函数
//质数的校验
//开始我也只是一知半解,后来明白的所以也就写了下来,记录一下
//在哥德巴赫猜想中,一个数的因子是成对出现的,比如:100 = 2 * 50、100 = 4 * 25等
//所以,一个数a,它的的因子,一个肯定是<=根号下a的,另一个肯定是>=根号下a的
//因为我们两个数,一个是i,一个是j=a-i
//所以我们只要判断他们符合条件即可
public static boolean isPrime(int i){
double m = Math.sqrt(i);
for(int j = 3 ; j <= m ; j += 2){
if (i % j == 0) {
return false;
}
}
return true;
}
完整版代码
import java.util.Scanner;
/**
* @author Ziph
* @date 2020年2月26日
* @Email mylifes1110@163.com
*/
public class Goldbach {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个大于6的偶数:");
int a = sc.nextInt();
//输入校验
while (a < 6 || a % 2 != 0) {
System.out.println("输入错误!");
System.exit(0);
}
//将输入的值拆分成两个数,i代表第一个数,j代表第二个数
for (int i = 3; i < a / 2; i += 2) {
int j = a - i;
//判断两个数均为质数
if (isPrime(i) && isPrime(j)) {
//打印输出结果
System.out.println(a + " = " + i + " + " + j);
}
}
}
//质数的校验
public static boolean isPrime(int i) {
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
return false;
}
}
return true;
}
}