※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 9020번 문제인 수열과 헌팅이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/9020

 

9020번: 골드바흐의 추측

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

www.acmicpc.net

골드바흐의 추측은 유명한 미해결문제로, 2를 제외한 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 내용을 담고 있다. 적당히 큰 수의 범위 내에서는 모든 짝수가 두 소수의 합으로 나타내짐이 알려져있다. 이 문제에서는 10000 이하의 (2가 아닌) 짝수를 두 "차이가 가장 적은" 소수의 합으로 나타내야 한다.

 

차이가 가장 적은 소수의 쌍을 찾기 위해 주어진 짝수의 절반값서부터 탐색해나가자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using std::cin;
using std::cout;

bool sieve[10001];

int main()
{
    for (int i = 2;i < 10001;i++) {
        sieve[i] = true;
    }
    for (int i = 2;i <= 100;i++) {
        if (sieve[i]) {
            for (int j = i * i;j < 10001;j += i) {
                sieve[j] = false;
            }
        }
    }

    int n;
    cin >> n;
    int x, pt;

    for (int i = 0;i < n;i++) {
        cin >> x;
        x /= 2;
        pt = 0;
        while (!sieve[x + pt] or !sieve[x - pt]) {
            pt++;
        }
        cout << x - pt << ' ' << x + pt << "\n";
    }

    return 0;
}

 

728x90

'BOJ' 카테고리의 다른 글

[BOJ 1992 // C++] 쿼드트리  (0) 2021.01.29
[BOJ 1963 // C++] 소수 경로  (0) 2021.01.28
[BOJ 20495 // C++] 수열과 헌팅  (0) 2021.01.26
[BOJ 20494 // C++] 스시  (0) 2021.01.25
[BOJ 20493 // C++] 세상은 하나의 손수건  (0) 2021.01.24

+ Recent posts