백준 6588번 : 골드바흐의 추측

반응형

백준 6588번 : 골드바흐의 추측

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Boolean[] booleans = new Boolean[1000001];
        Arrays.fill(booleans, false);
        booleans[0] = booleans[1] = true;
        for(int i=2; i<Math.sqrt(booleans.length); i++){
            if(booleans[i]) continue;
            for(int j=i*i; j<booleans.length; j+=i){
                booleans[j] = true;
            }
        }
        int number = 0;
        while((number = Integer.parseInt(br.readLine()))!=0){
            boolean check = false;
            for(int i=2; i<=number/2; i++){
                if(!booleans[i]&&!booleans[number-i]){
                    System.out.println(number + " = " + i + " + " + (number-i));
                    check = true;
                    break;
                }
            }
            if(!check){
                System.out.println("Goldbach's conjecture is wrong.");
            }
        }
    }

    public static void main(String args[]) throws IOException {
        new Main().solution();
    }
}

이 문제 역시 에라토스테네스의 체를 이용한다. 주어진 범위만큼 배열에 소수를 초기화 해놓고, 값을 입력 받아서 대칭이라는 점을 활용해 입력 받은 n/2 까지 for문을 돌려서 Array[i] 가 소수이고, Array[n-i] 가 소수 일때 출력하고 break문으로 빠져나온다. 그때 짝수를 두 홀수의 합으로 나타낼 수 없는지 체크하는 boolean  값을 설정해주고, 나타낼 수 없을때 출력해준다. 

 

 

반응형

'개발 > 알고리즘' 카테고리의 다른 글

백준 3085번 : 사탕 게임  (0) 2022.12.29
백준 2309번 : 일곱 난쟁이  (0) 2022.12.28
백준 1929번 : 소수 구하기  (0) 2022.12.28
백준 1978번 : 소수 찾기  (0) 2022.12.27
백준 17425번 : 약수의 합  (0) 2022.12.25