백준 - 6588번 : 골드바흐의 추측 (Silver I)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//소수인지를 담을 해시맵
HashMap<Integer, Boolean> decimal = new HashMap<>();
int num = 0;
while ((num = Integer.parseInt(br.readLine())) != 0) {
//소수 조합이 여러 개일 경우 차이가 큰 것을 리턴하는 것이기 때문에 작은 숫자부터 시작
for (int i = 2; i <= num; i++) {
//만약 i가 해시맵에 없으면 소수인지 파악 후 넣기
if (!decimal.containsKey(i)) decimal.put(i, check(i));
//i가 소수가 아니면 넘어가기
if (!decimal.get(i)) continue;
//n은 숫자에서 i를 뺀 숫자
int n = num - i;
//n 역시 해시맵에 없으면 소수인지 파악 후 넣기
if (!decimal.containsKey(n)) decimal.put(n, check(n));
//만약 n도 소수라면 bw에 입력 후 for문 종료
if (decimal.get(n)) {
bw.write(num + " = " + i + " + " + n + "\n");
break;
}
}
}
bw.flush();
bw.close();
}
//소수 파악용 함수
public static boolean check(int num) {
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) return false;
}
return true;
}
}