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

소수 판별
- 에라토스테네스의 체 를 이용하여 소수 판별
 
한 번만 해놓고 계속 쓴다!!!- 이 때
 i<=sqrt(1000000)까지만 돌려도 됨
테스트 케이스
- n을 입력 받고 (이 전에 n 초기화 해줄 것)
 i<=n/2까지만 계산하면서 소수끼리의 합을 구해줄 것- 제일 작은 해 하나 고르면 바로 나와도 됨.
 
주의할 점
25%~33%에서 시간초과 뜬다면
cin, cout대신scanf, printf이용해볼 것
난 바꾸니까 바로 통과했다 .. ! ㅠㅇㅠ
#include <iostream>
#include <stdio.h>
#include <cmath>
#define SIZE 1000001
using namespace std;
// 에라토스테네스의 체 초기화 
bool arr[SIZE] = {false};
int main(){ 
    int n = -1;
    arr[0] = true;
    arr[1] = true;
    // 소수 판별
    for(int i=2; i<=sqrt(SIZE); i++){
        if (arr[i] == true)
            continue;
        for(int j=i+i; j<=SIZE; j+=i){
            if(arr[j] == false)
                arr[j] = true;
        }
    }
    while(true){
        scanf("%d", &n);
        if (n == 0)
            return 0;
        else{
            bool find = false;
            int I;
            for(int i=2; i<=n/2; i++){
                if (!arr[i] && !arr[n-i]){
                    I = i;
                    find = true;
                    break;
                }
            }               
            if (find)
                printf("%d = %d + %d\n", n, I, n-I);
            else
                printf("Goldbach's conjecture is wrong.");
        }
    }
    return 0;
}
시간 초과에 고통받았던 문제 .. 그래도 하나씩 해결하니까 어찌저찌 됨~!!!

후 .. . . . .
★☆★☆★☆★ 골드바흐의 추측 FAQ ★☆★☆★☆★
[C] 25%에서 틀렸습니다가 뜹니다
시간초과가 납니다
[cpp] 50% 정도에서 틀리는 분들 참고하세요.