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 |