백준
[Java] 백준 6588번 - 골드바흐의 추측
효재감자
2024. 4. 23. 14:28
문제 링크 : https://www.acmicpc.net/problem/6588
에라토스테네스의 체를 이용한다.
2부터 시작해 자기자신을 빼고 배수에 해당하는 수를 모두 지운다.
boolean[] prime = new boolean[primeLength + 1];
Arrays.fill(prime, true);
// 제곱근까지만 봐도 충분함
for (int i = 2; i <= Math.sqrt(primeLength); i++) {
if (!prime[i]) continue;
for (int j = i * 2; j <= primeLength; j += i) {
prime[j] = false;
}
}
두 수를 더하는 것이니 절반까지만 돌아도 충분하다. 나머지 한 수가 채워주기 때문.
String input;
while (!(input = br.readLine()).equals("0")) {
int N = Integer.parseInt(input);
boolean flag = false;
// 소수가 3부터 시작하므로 3부터, 절반까지만 돌아도 되고, 홀수소수만보니 2씩만 증가한다
for (int i = 3; i <= primeLength / 2; i += 2) {
int B = N - i;
if (prime[i] && prime[B]) {
bw.write(N + " = " + i + " + " + B + "\n");
flag = true;
break;
}
}
if (!flag)
System.out.println("Goldbach's conjecture is wrong.");
}
bw.flush();