#include 
#include 

#define LIMIT 500000L
char is_prime[LIMIT];
main(argc, argv)
int argc;
char *argv[];
{
 if (argc != 2)
    {
     printf("Usage: sieve \n");
     exit(-1);
    }
 Sieve(atoi(argv[1]), is_prime);
 exit(0);
}

Sieve(limit, is_prime)
    long int limit;
    char is_prime[];
   {
    long int i;
    long int j;
    long int ix;
    double x;
    ix = (long int) (sqrt((double) limit)) + 1 ;
    
    for (i = 0; i < limit; i++)
       {
        is_prime[i] = 0;
       }
    is_prime[0] = 1;
    is_prime[1] = 1;
    for (i = 2; i < ix; i++)
       {
        if (is_prime[i] == 0)
           {
            for (j = i + 1; j < limit; j++)
               {
                if ((j % i) == 0)
                   {
                    is_prime[j] = 1; 
                   }
               }
           }
       }
    for (i = 0; i < limit; i++)
       {
        if (is_prime[i] == 0)
{
            printf(" %d \n", i);
}
       }
   } /* end Sieve */

    Source: geocities.com/drhenke