while(1) 작심삼일();

[백준 6588번] 골드바흐의 추측 본문

CS/baekjoon

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

hanjongho 2021. 1. 31. 14:15

http://www.acmicpc.net/problem/6588

 

6588번: 골드바흐의 추측

각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰

www.acmicpc.net

풀이) 

1929(소수 구하기)와 같은 방법으로, 소수 구하는 알고리즘을 다시 사용했다. 미리 입력값 범위에 해당하는 소수를 다 구해놓고 i와 n - i가 소수인지 확인한 후 출력해주었다. 차이가 가장 커야하므로 결과가 나오면 바로 탈출시켜주었다.

#include <iostream>
using namespace std;

int prime[1000001];
int is_prime(int n)
{
    int i;

    if (n < 2)
        return (0);
    i = 2;
    while (i <= n / 2 && i <= 1000)
        if (n % i++ == 0)
            return (0);
    return (1);
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n;
    for (int i = 2; i <= 1000000; i++)
        prime[i] = is_prime(i);
    while (1)
    {
        cin >> n;
        if (!n) break;
        for (int i = 2; i < n; i++)
        {
            if (prime[i] && prime[n - i])
            {
                cout << n << " = " << i << " + " << n - i << "\n";
                break ;
            }
        }
    }
    return (0);
}

 

 

제 코드는 절대 완벽하지 않습니다

더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!

'CS > baekjoon' 카테고리의 다른 글

[백준 11057번] 오르막 수  (0) 2021.01.31
[백준 11047번] 동전 0  (1) 2021.01.31
[백준 2156번] 포도주 시식  (0) 2021.01.31
[백준 2110번] 공유기 설치  (0) 2021.01.31
[백준 1992번] 쿼드트리  (0) 2021.01.31
Comments