[백준] 9020 - 골드바흐의 추측 (Java)

2022. 9. 20. 22:37·Computer Science/Algorithm

 

[백준] 9020번 : 골드바흐의 추측 - JAVA [자바]

https://www.acmicpc.net/problem/9020 9020번: 골드바흐의 추측 문제 1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때

st-lab.tistory.com

*해당 포스팅은 상단에 링크된 포스팅을 바탕으로 개인 공부 목적을 위해 작성되었으므로 자세한 내용은 위 링크를 확인해 주시기 바랍니다.


선생님(모르는 제자가 하나 생기신)이 저번에 알려주신 골드바흐의 추측이 문제로 나왔다. 댓글에 나랑 비슷하게 생각하신 분이 계셨다.

 

진짜 나는 여기서 한 번 더 배워간다. 선생님은 천재다.

 

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

public class Main {

    /**
     * 골드바흐의 추측
     * 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다.
     *
     * 골드바흐 파티션
     * 짝수를 두 소수의 합으로 나타내는 표현
     * 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, ...
     */

    public static boolean[] prime = new boolean[10001];

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

        get_prime();

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

        while (N-- > 0) {
            int n = Integer.parseInt(br.readLine());
            int first = n / 2;
            int second = n / 2;

            while (true) {
                if(!(prime[first]) && !(prime[second])) {
                    sb.append(first).append(" ").append(second).append("\n");
                    break;
                }
                first--;
                second++;
            }
        }
        System.out.println(sb);

    }

    public static void get_prime() {
        prime[0] = prime[1] = true;

        for (int i = 2; i <= Math.sqrt(prime.length); i++) {
            if (prime[i]) continue;
            for (int j = i * i; j < prime.length; j += i) {
                prime[j] = true;
            }
        }
    }
}

 

에라토스테네스의 체 알고리즘을 자바로 구현하는 게 이제는 손에 익었다. 문제 하나 풀 때마다 제대로 이해하고 넘어가는 게 정말 중요한 거구나를 확실히 느꼈다. 

 

 

 

 

 

 

 

 

 

 

'Computer Science > Algorithm' 카테고리의 다른 글

[백준] 2751 - 수 정렬하기 2 (Java)  (0) 2022.09.21
[백준] 2750 - 수 정렬하기 (Java)  (0) 2022.09.21
[백준] 2581 - 소수 (Java)  (1) 2022.09.19
[알고리즘] 빅오 표기법(Big-O notation) 이해하기  (0) 2022.09.19
[백준] 2839 - 설탕 배달 (Java)  (0) 2022.09.18
'Computer Science/Algorithm' 카테고리의 다른 글
  • [백준] 2751 - 수 정렬하기 2 (Java)
  • [백준] 2750 - 수 정렬하기 (Java)
  • [백준] 2581 - 소수 (Java)
  • [알고리즘] 빅오 표기법(Big-O notation) 이해하기
soro.k
soro.k
  • soro.k
    일일소록
    soro.k
  • 전체
    오늘
    어제
    • 분류 전체보기 (181)
      • Java (14)
      • Spring (24)
      • JavaScript (5)
      • DB (32)
      • Web (6)
      • Computer Science (47)
        • Operating System (9)
        • Network (3)
        • Data Structure (6)
        • Algorithm (28)
      • Git (1)
      • 노트 (4)
        • F-lab (20)
        • 회고 (14)
        • Review (12)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
soro.k
[백준] 9020 - 골드바흐의 추측 (Java)
상단으로

티스토리툴바