728x90
https://www.acmicpc.net/problem/6588
에라토스테네스의 체를 이용해 소수르 판별하고, 이후 완전탐색을 진행했는데 시간초과가 났다.
그래서 두번돌면 안되는 것을 확인했고, i, n - i 가 둘 다 소수인 것을 찾아야한 다는 것을 생각해내었다.
#include <iostream>
#include <vector>
#define MAX 1000000
using namespace std;
vector<int> primeNum;
bool* check = new bool[MAX];
int main(){
cin.tie(NULL);
ios_base::sync_with_stdio(0);
for(int i = 0; i <= MAX; i++) check[i] = false;
for(int i = 2; i * i <= MAX; i++){
if(check[i] == false){
for(int j = i * i; j <= MAX; j += i){
check[j] = true;
}
}
}
int tmp = -1;
cin >> tmp;
while(tmp != 0){
bool flag = false;
for(int i = 3; i <= MAX; i++){
if(check[i] == false && check[tmp - i] == false) {
cout << tmp << " = " << i << " + " << tmp - i << '\n';
flag = true;
break;
}
}
if(!flag){
cout << "Goldbach's conjecture is wrong.\n";
}
cin >> tmp;
}
}
'백준 문제 풀이' 카테고리의 다른 글
백준 16235 나무 재테크(C++) (7) | 2024.09.06 |
---|---|
백준 32176번 - 통신 시스템의 성능 저하(C++) (0) | 2024.09.03 |
백준 25214번 - 크림 파스타(C++) (0) | 2024.08.21 |
백준 5911번 - 선물 (C++) (0) | 2024.08.20 |
백준 13904번 - 과제 (C++ / Greedy 알고리즘) (4) | 2024.08.16 |