IT's 2 EG
에라토스테네스의 체(Sieve of Eratosthenes) 본문
에라토스테네스의 체(Sieve of Eratosthenes)
고대 그리스의 수학자 에라토스테네스가 만들어 낸 비교적 작은 구간(10^8 이하)에서 소수를 빠르게 찾는 방법 입니다.
마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체라고 부릅니다.
에라토스테네스의 체 소수 확인 과정
N개의 자연수를 모두 적습니다. 이 중 1을 제외한 2부터 진행을 합니다.
여기서 자기 자신을 제외한 자기자신의 배수를 제외시키면서 소수를 확인 합니다.
2의 경우 2를 소수로 지정하고, 2의 배수인 4, 6, 8, 10 등은 소수에서 제외합니다.
위와 같은 행위를 반복하여 소수를 찾습니다.
에라토스테네스의 체 예제
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int sp, ep;
bool prime[1000002];
int main(int argc, char* argv[])
{
scanf("%d %d", &sp, &ep);
prime[0] = prime[1] = true;
for (int i = 2; i*i <= ep; i++)
{
if (prime[i] == false)
{
for (int j = i*i; j <= ep; j += i)
prime[j] = true;
}
}
for (int i = sp; i <= ep; i++)
{
if (prime[i] == false)
printf("%d\n", i);
}
return 0;
}
'알고리즘 > 이론' 카테고리의 다른 글
유클리드 호제법(Euclidean Algorithm) (0) | 2017.06.25 |
---|---|
유니온 파인드(Union-Find, Disjoint Set) (0) | 2017.06.16 |
세그먼트 트리(Segment Tree) (0) | 2017.06.11 |
플로이드-워셜(Floyd-Warshall) (0) | 2017.06.11 |
다익스트라(Dijkstra) (0) | 2017.06.11 |
Comments