洛谷 java P1304 哥德巴赫猜想
题目描述
输入一个偶数 N(N<=10000)N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想:任一大于 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10,10=3+7=5+5,则 10=5+5 是错误答案。
输入格式
第一行N
输出格式
4=2+2 6=3+3 …… N=x+y
输入输出样例
输入 #1复制
10
输出 #1复制
4=2+2
6=3+3
8=3+5
10=3+7
解题思路
写出一个找到质数的方法 isPrime(),再通过循环每一个小于等于n的偶数,在每个偶数i内找到其的一个质数 j ,另一个质数就是这个偶数减去这个质数 i - j ,因为 j 是从小到到循环,就不会出现 10 = 5 + 5 这种情况,找到 3 以后就结束了。
代码实现
import java.util.Scanner;
public class Main{
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
for (int i = 4; i <= n; i += 2) {
//两个质数之和(在2~i去找),找到其中一个数是质数,另一个就是i-j
for (int j = 2; j <= n; j++) {
if (isPrime(j) && isPrime(i - j)) {
System.out.println(i + "=" + j + "+" +(i-j));
break;
}
}
}
}
//判断是否是质数
private static boolean isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}