에라토스테네스의 체
만약에 1~300까지의 소수를 구해라 어떻게 할 것인가?
#include <stdio.h>
#include <math.h>
#define SIZE 120
int main(void)
{
int a[SIZE] = { 0 }; // 0 ~ 300
int i, j;
for (i = 2; i <= sqrt(SIZE); i++) { // 최대값의 제곱근까지 반복
if (a[i] == 0) {
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;
}
핵심 코드는 2개다.
for (i = 2; i <= sqrt(SIZE); i++) { // 최대값의 제곱근까지 반복
if (a[i] == 0) {
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;
}