에라토스테네스의 체는 소수(Prime Number)를 찾는 방법이다.
ex)
200 이하의 소수를 구하고 싶다면, 15^2 > 200 이므로 15보다 작은 수의 배수들만 지우면 된다.
-> 200보다 작거나 같은 수 중에서 2, 3, 5, 7, 11, 13의 배수(자기 자신 제외)를 지우고 남는 수는 모두 소수
#include <stdio.h>
#include <math.h>
#define SIZE 201
int main(void)
{
int a[SIZE] = { 0 }; // 0 ~ 200
int i, j;
for(i = 2; i <= sqrt(SIZE); i++) { // 최대값의 제곱근까지 반복
if(a[i] == 0) { //i가 소수이면
for(j = 2; i * j < SIZE; j++) { // 자신을 제외한 i의 배수 제거
a[i * j] = 1;
}
}
}
for(i = 2; i < SIZE; i++) {
if(a[i] == 0) printf("%d\n", i);
}
return 0;
}