자윤이와고리즘/Code

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

EUJU 2019. 5. 8. 18:31

이 문제도 시간초과가 나서 당황스러웠던 문제,,,,, 답은 제대로 나오는데 어떻게 풀어야할까 고민하다가,,

검색을 해보니 cin, cout과 printf, scanf의 속도차이가 크다고 해서 일단 cin만 scanf로 수정을 해주었더니 바로 맞았습니다, 가 떴다.

 

속도를 위해선 scanf와 printf를 써야함을 잊지 말자!

#include <iostream>
using namespace std;
bool check[1000001];

int main() {
    int num, i, j, tmp, flag = 0;

    check[0] = check[1] = true;

    for (i = 2; i < 1000001; i++) {
        if (check[i] == false) {
            for (j = i * 2; j < 1000001; j += i)
                check[j] = true;
        }
    }

    scanf("%d", &num);
    while (num != 0) {
         for (i = 3; i < num/2 + 1; i++) {
             if (check[i] == false) {
                  tmp = num - i;
                  if (tmp>0 && check[tmp] == false) {
                       cout << num << " = " << i << " + " << tmp << '\n';
                       flag = 1;
                       break;
                  }
            }
        }
        if (flag == 0)
             cout << "Goldbach's conjecture is wrong.\n";
        scanf("%d", &num);
    }

}