ALGORITHM

[JAVA] 백준 9020번- 골든바흐의 추측

연듀 2022. 8. 30. 17:49

https://www.acmicpc.net/problem/9020

 

9020번: 골드바흐의 추측

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아

www.acmicpc.net

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        int[] arr = new int[100001];

        // 소수가 아니면 1으로
        for(int i=2; i<=Math.sqrt(arr.length); i++){
            for(int j=i*i; j<arr.length; j+=i){
                if(arr[j] == 0) arr[j] = 1;
            }
        }

        while(T-- >0){
            int n = Integer.parseInt(br.readLine());
            for(int i=n/2; i>0; i--){
                if(arr[i]!=1 && arr[n-i]!=1){ // 차가 적은 숫자들부터 차를 늘려나가며 검사
                    System.out.println(i+" "+(n-i));
                    break;
                }
            }
        }
    }
}

 

소수인 숫자들을 구하는건 에라토스테네스의 체를 사용했다.

차이가 제일 작은 두 소수를 구할 때 이중 for문을 돌려 했더니 시간 초과 났다. 

다른 풀이를 보니 중간에 있는 숫자들로 시작해 그 차이를 넓혀나가며 for문을 돌면 효율적으로 바로 찾을 수 있었다. 

'ALGORITHM' 카테고리의 다른 글

[JAVA] 백준 15655번- N과 M(6)  (0) 2022.09.01
[JAVA] 백준 15654번- N과 M(5)  (0) 2022.09.01
[JAVA] 백준 4948번- 베르트랑 공준  (0) 2022.08.29
[JAVA] 백준 1929번- 소수 구하기  (0) 2022.08.29
[JAVA] 백준 2581번- 소수  (0) 2022.08.28