首先读题干,题目有三点要抓住:
- 验证4~N所有偶数是否符合哥德巴赫猜想(for循环 i从4到N i+=2 )
for(int i = 4; i <= n;i+= 2) { //穷尽4到n 的所有偶数
gold(i);
}
- 任一大于 2 的偶数都可写成两个质数之和 (把循环的i都拆成 j + k , k=i - j, 其中 j 和 k都要是质数)
public static void gold(int k){
for( int i = 2; i <= k ; i++){
if(Prime(i) && Prime(k -i)){
System.out.println(k + "=" + i + "+" +(k-i));
break;
}
}
}
public static boolean Prime(int n){
if(n <= 1) return false;
for(int i = 2; i <=Math.sqrt(n);i++){
if(n % i == 0){
return false;
}
}
return true;
}
- 如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案(就是例如 10,10=3+7=5+5,则 10=5+5 是错误答案。完整代码会将体现)
import java.util.Scanner; public class p1304 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); for(int i = 4; i <= n;i+= 2) { //穷尽4到n 的所有偶数 gold(i); } } public static void gold(int k){ for( int i = 2; i <= k ; i++){ if(Prime(i) && Prime(k -i)){ System.out.println(k + "=" + i + "+" +(k-i)); break; /* 这个break就能保证第一个加数相比其他分法最小的方案,因为i从2开始循环,循环到第一个方案就是题目要的方案。 */ } } } public static boolean Prime(int n){ if(n <= 1) return false; for(int i = 2; i <=Math.sqrt(n);i++){ if(n % i == 0){ return false; } } return true; } }