에라토스테네스의 체 - C언어

nakkim·2021년 9월 5일
0
post-custom-banner

에라토스테네스의 체는 소수(Prime Number)를 찾는 방법이다.


알고리즘

  1. 소수를 찾을 범위(최대값)를 결정한다.
  2. 2부터 최대값까지 모든 수를 나열한다.
  3. 2는 소수이므로 자기 자신을 제외한 2의 배수를 모두 지운다.
  4. 남은 수 중 3은 소수이므로 자신을 제외한 3의 배수를 모두 지운다.
  5. 남은 수 중 5는 소수이므로 자신을 제외한 5의 배수를 모두 지운다. (4는 2의 배수이므로 지워짐)
  6. 남은 수 중 7은 소수이므로 자신을 제외한 7의 배수를 모두 지운다. (6은 2의 배수이므로 지워짐)
  7. 위의 과정을 최대값의 제곱근까지만 반복하면 소수만 남는다.

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;
}
profile
nakkim.hashnode.dev로 이사합니다
post-custom-banner

0개의 댓글