[알고리즘]/백준
백준 6588 자바 - 골드바흐의 추측
broship
2021. 6. 29. 08:00
문제
문제해결
- 에라토스테네스의 체를 활용하여 소수를 구한다, boolean 배열에서 소수는 false가 된다
- 홀수 소수만 사용하기 때문에 모든 짝수는 true로 바꾼다, 홀수 소수만 false가 된다
- 3부터 1000000까지 반복문을 돌면서 i가 홀수 소수이며 입력받은 num - i 가 홀수 소수일때는 추측이 성립한다
- b-a가 가장 큰걸 출력해야 하므로 가장 첫번째 것만 출력하고 반복문을 빠져나온다
- 추측이 성립 안될 경우 "Goldbach's conjecture is wrong."를 출력해야 하지만 그런 경우는 없는 듯 하다(flag 변수로 해주는 것이 좋다)
import java.util.Scanner;
public class B6588 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//소수 구하기
boolean[] sosu = new boolean[1000001];
sosu[0] = true;
sosu[1] = true;
for (int i = 2; i <= Math.sqrt(1000000); i++) {
if (sosu[i]) continue;
for (int j = i*i; j <= 1000000; j+=i) {
sosu[j] = true;
}
}
//홀수만 false로
for (int i = 2; i <= 1000000; i+=2) {
sosu[i] = true;
}
int num = 0;
while ((num=sc.nextInt())!=0){
for (int i = 3; i <= 1000000; i++) {
if (!sosu[i] && !sosu[num-i]){
System.out.println(num + " = " + i + " + " + (num-i));
break;
}
}
}
}
}