IT_Programming/C · C++

에라토스테네스의 체.. 매크로로 정한 수까지 모든 소수를 찾아라.

JJun ™ 2007. 1. 26. 21:04

/* 에라토스텔레스의 체 (Eratosthenes's sieve) */

 

#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>

 

#define MAX 10

 

void main(void)
{
   int* iptr;
   int i, j;

   iptr = (int*)calloc(MAX,sizeof(int));     // 메모리 할당 초기화

  

   if(iptr == NULL)                                // 메모리 할당 실패
   {
      puts("\n 메모리 할당 실패!");
      exit(1);                                
   }

 

   for(i=2;i<MAX;i++)
   {
      if(iptr[i] == 1)            
// 이미 지워진 수, 소수가 아님
         continue;

  

      j = i;                               // i를 기점으로 해서

      while((j += i) <= MAX)      // i의 배수들을 모두 지운다.
                 iptr[j] = 1;
   }

 

   for(i=2;i<=MAX;i++)                 // 소수의 출력
       if(iptr[i] == 0)
             printf("\t%6d",i);

}