알고리즘

[백준 6588 JAVA] 골드바흐의 추측

begong 2024. 5. 7. 21:25
반응형

 

"에라토스테네스의 체"를안다면 쉽게 풀리는 문제이다.

 

에라토스테네스의 체란 간단히 말해

소수의 배수 = 소수가 아님을 이용한 것이다.

반복문을 돌며 가작 작은 소수인 2부터 배수를 지워주고 그다음 3 , 5 순으로 돌면서 배수를 지워준다.

이때 배열로 배수를 지우며, 이미 체크가 된 숫자는 소수가 아니므로 검사를 넘어간다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        boolean[] astonia = new boolean[1000001];
        for (int i = 2; i < 1000001; i++) {
            if (astonia[i]) {
                continue;
            }
            int j = 2;
            while (j * i < 1000001) {
                astonia[i * j] = true;
                j++;
            }
        }
        while (true) {
            int N = Integer.parseInt(br.readLine());
            if (N == 0) break;
            boolean answer = false;
            for (int i = 2; i < N - 1; i++) {
                if (!astonia[i] && !astonia[N - i]) {
                    System.out.println(N + " = " + i + " + " + (N - i));
                    answer = true;
                    break;
                }
            }
            if (!answer) {
                System.out.println("Goldbach's conjecture is wrong.");
            }


        }
    }
}
반응형