카테고리 없음
백준 6588: 골드바흐의 추측(JAVA)
갹둥
2022. 8. 20. 13:33
https://www.acmicpc.net/problem/6588
6588번: 골드바흐의 추측
각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰
www.acmicpc.net
소수찾기에서 사용한 아리스토테네스의 체 알고리즘을 이용하여 1000000까지 자연수의 소수 판별을 미리 한 후 prime이라는 boolean 배열에 담아둔다.
a+b=N을 만족하고 prime[a]와 prime[b]가 둘 다 false인 a와 b를 찾기 위한 반복문을, a=3, b=N-3부터 b가 a보다 작아질 때 까지 검사한다.
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int N;
int cnt=0;
boolean[] prime = new boolean[1000001];
prime[1] = true;
for(int i=2; i<1000001; i++) {
if(prime[i])
continue;
for(int j=2; i*j<1000001; j++)
prime[i*j]=true;
}
do {
N=sc.nextInt();
if(N==0) break;
int a = 3;
int b = N - a;
while(true) {
if(!prime[a]&&!prime[b]) {
sb.append(N+" = "+a+" + " + b+"\n");
break;
}
if(b<a) {
sb.append("Goldbach's conjecture is wrong.\n");
break;
}
b-=2;
a+=2;
}
}while(true);
System.out.println(sb);
}
}