Algorithms/BOJ

[BOJ]1456:거의 소수(에라토스테네스의 체)

수연초이 2020. 10. 20. 00:48

* 바킹독님 블로그를 참고하여 공부했다

 

[에락토스테네스의 체]

구현방식: N크기의 배열을 만들어 각 수의 배수를 소수가 아님(false)을 저장

i가 N에 도달할때까지 j가 2*i부터 시작하여 N까지 탐색

 

[에락토스테네스의 체 최적화]

에락토스테네스를 구현할 시 최적화는 필수이다.

최적화를 하지 않는다면 그냥 각각에 대해 소수를 판별하는 방법을 사용하는 것이 낫다.

최적화:

1) j = 2i가 아닌 i*i부터 시작

2) i*i <= N 인 경우에만 반복문

3) 소수 판정값은 0, 1이 아닌 Boolean 타입인 True, False로 하여 메모리 절약(cache hit rate도 증가됨)

시간복잡도: O(NlgNlogN)

 

(개념 복습 차원에서 푼 BOJ 소수구하기: github.com/SuyeonChoi/Algorithms/blob/master/BaekJoon/Python/%EC%88%98%ED%95%99/p1929.py )

 

개념을 완벽하게 이해하니 문제는 풀만했다. 하지만 범위 설정 조건이 달라지면 많이 헷갈린다..

그래도 문제 자체는 내 힘으로 풀었다

github.com/SuyeonChoi/Algorithms/blob/master/BaekJoon/Python/%EC%88%98%ED%95%99/p1456.py