본문 바로가기

백준

백준11502 - 새 개의 소수 문제

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

 

11502번: 세 개의 소수 문제

문제 정수론(수학)에서, 세 개의 소수 문제(3-primes problem) 는 다음과 같은 추측을 말한다. '5보다 큰 임의의 홀수는 정확히 세 개의 소수들의 합으로 나타낼 수 있다. 물론 하나의 소수를 여러 번 ��

www.acmicpc.net

1000이하의 소수를 구한 뒤 벡터에 저장하고 이 벡터를 이중 포문으로 순회하며 특정수에서 뺀 수가 소수이면 출력을 해주는 문제이다. 오름차순으로 출력해야 되고 중복된 원소를 사용할 수 있어 multiset을 이용하였다.  

#include <iostream>
#include <vector>
#include <set>
using namespace std;

int mat[1001];
vector<int> v;
void find_prime() {
    for(int i = 1; i <= 1000; i++) {
        mat[i] = i;
    }
    for(int i = 2; i <= 1000; i++) {
        if(!mat[i]) {
            continue;
        }
        v.push_back(mat[i]);
        for(int j = i + i; j <= 1000; j += i) {
            mat[j] = 0;
        }
    }
}

int main() {
    find_prime();
    
    int T;
    cin >> T;
    
    while(T--) {
        bool check = false;
        int n;
        cin >> n;
        for(int i = 0; i < v.size(); i++) {
            bool x = false;
            for(int j = 0; j < v.size(); j++) {
                int temp = n - v[i] - v[j];
                if(temp <= 1) {
                    break;
                }
                if(mat[temp]) {
                    multiset<int> st;
                    st.insert(v[i]);
                    st.insert(v[j]);
                    st.insert(temp);
                    auto it = st.begin();
                    for(it; it != st.end(); it++) {
                        cout << *it << ' ';
                    }
                    cout << '\n';
                    check = true;
                    x = true;
                    break;
                }
            }
            if(x) {
                break;
            }
        }
        if(!check) {
            cout << 0 << '\n';
        }
    }
}

'백준' 카테고리의 다른 글

백준11779 - 최소비용 구하기 2  (0) 2020.06.01
백준2023 - 신기한 소수  (0) 2020.05.29
백준2696 - 중앙값 구하기  (0) 2020.05.17
백준11501 - 주식  (0) 2020.05.16
백준16162 - 가희와 3단 고음  (0) 2020.05.13