https://www.acmicpc.net/problem/6588
코드 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean[] prime = new boolean[1000001];
prime[0] = true;
prime[1] = true;
for (int i = 2; i <= Math.sqrt(1000000); i++) {
if(prime[i] == true){
continue;
}
for (int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
}
//입력 값 0 아니면 계속 실행
int num;
boolean isGoldbachCorrect = false;
while((num = Integer.parseInt(br.readLine())) != 0){
// 홀수만 이므로 i+=2로 설정
// 차가 가장 큰 수를 찾아야하므로, 양쪽 끝에서 합으로 나타낼 수 있는 수를 탐색한다.
// 둘 다 소수일 경우 append후 탈출
for (int i = 1; i <= num/2+1; i+=2) {
int primeNum1 = i;
int primeNum2 = num - i;
if (!prime[primeNum1] && !prime[primeNum2]) {
sb.append(num).append(" = ").append(primeNum1).append(" + ").append(primeNum2).append("\n");
isGoldbachCorrect = true;
break;
}
}
if(!isGoldbachCorrect){
sb.delete(0, sb.length());
sb.append("Goldbach's conjecture is wrong.");
break;
}
}
System.out.print(sb);
}
}
9020번과 유사한 문제다. 제목 구분도 안돼 있다.
주의할 점은 한 케이스라도 일치하지 않으면, 골드바흐의 추측은 틀렸다고만 반환해야 한다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 2004번 - 조합 0의 개수 (Java 8) (0) | 2022.03.15 |
---|---|
백준 1676번 - 팩토리얼 0의 개수 (Java 8) (0) | 2022.03.15 |
백준 1934번 - 최소공배수 (Java 8) (0) | 2022.03.15 |
백준 2608번 - 최대공약수와 최소공배수 (Java 8) (0) | 2022.03.15 |
백준 11656번 - 접미사 배열 (Java 8) (0) | 2022.03.14 |
댓글