에라토스테네스의 채를 응용해서 풀었다.. 요런거는 백준에서는 테스트케이스를 다돌리는 거 같아서 소수 테이블을 구해주고 나머지를 코딩해주는게 낫다. 근데 이거 채점할 당시에 백준서버가 터져서 맞는답인지는 모른다. 케이스마다 답은 다 나오는데 시간초과의 위험이 상당히 큰 문제라 ㅎㅎ
-----------------------------------------------------------
역시 시간초과 떳는데 사실 여기 코드 그대로 하면 시간초과가 안뜬다. 그 비밀은 line8부터 10이다. 이 세 가지 함수는 cin, cout을 c형식인 printf, scanf를 사용하는 것처럼 바꿔 속도가 증가하게 된다. 역시 속도는 c다.. 다른 방법으로는 이렇게 시간이 중요한 문제(아슬아슬하게)는 printf를 써주면되겠다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> using namespace std; //소수를 구하고! 에리스토테에스의 채로!! //그 담에 표현이 되는지 봐보자 const int MAX = 1000000; bool is_pn[MAX + 1]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); is_pn[0] = is_pn[1] = true; for (int i = 2; i*i <= MAX; ++i) if (is_pn[i] == false) { for (int j = 2*i; j <= MAX; j += i) is_pn[j] = true; } int input = 0; cin >> input; while (input != 0) { for (int i = input - 1; i >= input/2; --i) { if (is_pn[i] == false && is_pn[input - i] == false) { cout << input << " = " << input - i << " + " << i << '\n'; break; } if (i == input/2) { cout << "Goldbach's conjecture is wrong.\n"; break; } } cin >> input; } return 0; } | cs |
'백준 온라인 저지' 카테고리의 다른 글
백준 1260: DFS와 BFS (0) | 2018.07.15 |
---|---|
백준 1676: 팩토리얼 0의 개수 (0) | 2018.07.13 |
백준 1929: 소수구하기(충격의 endl) (0) | 2018.07.13 |
백준 1978: 소수 찾기 (0) | 2018.07.13 |
백준 1373: 2진수 8진수 (0) | 2018.07.13 |