알고리즘 Lv1 - 소수찾기(use 에라토스테네스의 체)
2022.05.16
알고리즘 문제를 풀다가 채점결과에서 효율성이 0점이 나왔다 ㅋㅋ..
확실히 문제를 풀면서 '아 이건 효율성이 좀 많이 떨어질거 같은데..' 가 딱 들어맞았다.
효율성 문제를 찾다가 '에라스토테네스의 체' 라는 소수 판별 알고리즘을 발견했다.
위와 같이 '에라스토테네스의 체' 알고리즘을 쓸 경우는 시간 복잡도가 O(N^(1/2)) 이다.
코드 설명
1 . vector<bool> 을 입력받은 n만큼 범위를 지정하고 true로 초기화합니다.
2. for문은 2부터 n+1까지 1씩 증가합니다. (1은 소수에 미포함이기 때문에 2부터 증가)
3. tmp[i]가 true일 경우 for문 하나가 돌아가는데 가장 먼저 2의 배수를 가진 tmp[i]는 모두 false가 됩니다.
(2 자신은 제외, answer++)
4. 다음으론 3의 배수가 전부 false 처리됩니다. (이 실행 이후 tmp[i]는 전부 소수만 남게 됨)
5. tmp[i] == true 라는 건 소수를 의미하게 되고 if문에 걸릴때마다 answer++을 하게되어 소수의 갯수를 찾게 됩니다.
댓글을 작성해보세요.