출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

상세 컨텐츠

본문 제목

백준 2960 에라토스테네스의 체(구현)

알고리즘

by 장동균 2020. 7. 27. 21:46

본문

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

#include <iostream>

using namespace std;
bool check[123456 * 2 + 1];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    for (int i = 2; i * i <= 123456 * 2; i++)
    {
        if (check[i] == false)
            for (int j = i * i; j <= 123456 * 2; j += i)
            {
                check[j] = true;
            }
    }
    while (1)
    {
        int n;
        cin >> n;
        int count = 0;
        if (n == 0)
            break;
        for (int i = n + 1; i <= 2 * n; i++)
        {
            if (check[i] == false)
                count++;
        }
        cout << count << "\n";
    }
}

에라토스테네스의 체, 소수를 확인할 때 사용하는 알고리즘.

 

감사하게도 

https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 수학에서 에라토스테네스의 체는 소수(素數, 발음: [소쑤])를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 �

ko.wikipedia.org

이곳에 들어가면 바로 오른쪽에 에라토스테네스의 체가 작동하는 과정이 보여진다.

 

  1. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
  2. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색)
  3. 자기 자신을 제외한 2의 배수를 모두 지운다.
  4. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색)
  5. 자기 자신을 제외한 3의 배수를 모두 지운다.
  6. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색)
  7. 자기 자신을 제외한 5의 배수를 모두 지운다.
  8. 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색)
  9. 자기 자신을 제외한 7의 배수를 모두 지운다.
  10. 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.

이러한 과정을 거치면 결국 소수가 아닌 것들만 남게 된다!!

'알고리즘' 카테고리의 다른 글

백준 2573 빙산(bfs)  (0) 2020.07.28
백준 2573 빙산(dfs)  (0) 2020.07.27
백준 2583 영역 구하기(bfs)  (0) 2020.07.27
백준 1707 이분 그래프(dfs)  (0) 2020.07.26
백준 1389 케빈 베이컨의 6단계 법칙(Floyd Warshall)  (0) 2020.07.26

관련글 더보기

댓글 영역