哥德巴赫猜想
题目描述
输入一个偶数 N N N,验证 4 ∼ N 4\sim N 4∼N 所有偶数是否符合哥德巴赫猜想:任一大于 2 2 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10 10 10, 10 = 3 + 7 = 5 + 5 10=3+7=5+5 10=3+7=5+5,则 10 = 5 + 5 10=5+5 10=5+5 是错误答案。
输入格式
第一行输入一个正偶数 N N N
输出格式
输出 N − 2 2 \dfrac{N-2}{2} 2N−2 行。对于第 i i i 行:
首先先输出正偶数 2 i + 2 2i+2 2i+2,然后输出等号,再输出加和为 2 i + 2 2i+2 2i+2 且第一个加数最小的两个质数,以加号隔开。
样例 #1
样例输入 #1
10
样例输出 #1
4=2+2
6=3+3
8=3+5
10=3+7
提示
数据保证,$ 4 \leq N\leq10000$。
代码
import com.sun.org.apache.bcel.internal.generic.NEW;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.IdentityHashMap;
/**
* @author: ZZJ
* @date: 2023/03/06
* @desc:
*/
public class Main {
private static final BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static final PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
try {
int i = Integer.parseInt(in.readLine());
ArrayList<Integer> integers = new ArrayList<>();
for (int j = 0; j < i; j++) {
if (isPrime(j)) integers.add(j);
}
for (int j = 2; j <= i; j++) {
boolean flag = false;
if (j % 2 != 0) continue;
else{
for (int k = 0; k < integers.size(); k++) {
for (int l = 0; l < integers.size(); l++) {
if (integers.get(k) + integers.get(l) == j){
out.println(j+"="+integers.get(k)+"+"+integers.get(l));
flag = true;
break;
}
}
if (flag) break;
}
if (flag) continue;
}
}
}finally {
out.flush();
}
}
public static boolean isPrime(int num){
if (num <= 1) return false;
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0){
return false;
}
}
return true;
}
}