#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 */