Programming/알고리즘
에라토스테네스의 체
hsayho
2020. 11. 15. 13:01
에라토스테네스의 체는 대표적인 소수(Prime Number) 판별 알고리즘이다.
에라토스테네스의 체 알고리즘은 한 두개의 소수를 판별하는 경우가 아닌 대량의 소수를 한꺼번에 판별할 때 사용한다.
에라토스테네스의 체는 우선 예를 들어 1부터 100까지의 수에서 소수를 판별한다고 하면 크기가 101인 int형 배열을 선언한다. 그리고 초기에 각 인덱스는 인덱스의 값으로 초기화를 시켜준다.
그 후 반복문을 통해 2의 배수, 3의 배수 ,4의 배수, ... 에 해당하는 인덱스의 값을 0으로 바꿔주는데 시간 복잡도를 줄이기 위해 이미 0인 부분은 continue를 사용하여 스킵되도록 한다.
#include <iostream>
using namespace std;
int number = 100;
int a[101];
void isPrimeNumberSieve() {
for (int i = 2; i <= number; i++) {
a[i] = i;
}
for (int i = 2; i <= number; i++) {
if (a[i] == 0) continue;
for (int j = i + i; j <= number; j += i) {
a[j] = 0;
}
}
for (int i = 2; i <= number; i++) {
if (a[i] != 0)
printf("%d ", a[i]);
}
}
int main() {
isPrimeNumberSieve();
return 0;
}
그러면 위와 같이 대량의 소수를 판별해내는 것을 확인할 수 있다!