에라토스테네스의 체를 이용해서 소수들을 구하고
시간복잡도를 줄여주기 위해
i -= 2 를 해줬다.
그리고 for loop을 2개 중첩안시킴
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <math.h> | |
/** | |
* https://www.acmicpc.net/problem/6588 | |
* BOJ 백준온라인져지 6588 골드바흐의 추측 풀이 | |
*/ | |
#define MAX 1000001 | |
int main(){ | |
int *isPrimeNumber = new int[MAX]; | |
for(int i = 2; i < MAX ; i++) isPrimeNumber[i] = true; | |
for(int i = 2, squareRoot = sqrt(MAX); i <= squareRoot; i++){ | |
if(isPrimeNumber[i]) | |
for(int j = i * i; j < MAX ; j += i) | |
isPrimeNumber[j] = false; | |
} | |
while(1){ | |
int N; | |
scanf("%d", &N); | |
if(N){ | |
int loopStartNumber = N - 1; | |
bool isPrint = false; | |
for(int i = loopStartNumber, NDivided = N / 2; i >= NDivided && !isPrint; i -= 2){ | |
if(isPrimeNumber[i] && isPrimeNumber[N - i]){ | |
printf("%d = %d + %d", N, N - i, i); | |
isPrint = true; | |
} | |
} | |
if(!isPrint) printf("Goldbach's conjecture is wrong."); | |
printf("\n"); | |
}else break; | |
} | |
} |
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 11047 동전 0 풀이 (0) | 2017.12.07 |
---|---|
BOJ 백준온라인져지 1016 제곱 ㄴㄴ 수 풀이 (0) | 2017.12.06 |
BOJ 백준온라인져지 2960 에라토스테네스의 체 풀이 (0) | 2017.12.06 |
BOJ 백준온라인져지 2490 윷놀이 풀이 (0) | 2017.12.05 |
BOJ 백준온라인져지 10872 팩토리얼 풀이 (0) | 2017.12.05 |