/* * Calculate all primes up to a specific number. */ #include #include /*****************************************************************************/ /* Data */ /*****************************************************************************/ #define COUNT 8192 /* Up to what number? */ #define SQRT_COUNT 91 /* Sqrt of COUNT */ static unsigned char Sieve[COUNT]; /*****************************************************************************/ /* Code */ /*****************************************************************************/ int main (void) { /* This is an example where register variables make sense */ register unsigned char* S; register unsigned I; register unsigned J; /* Execute the sieve */ I = 2; while (I < SQRT_COUNT) { if (Sieve[I] == 0) { /* Prime number - mark multiples */ S = &Sieve[J = I*2]; while (J < COUNT) { *S = 1; S += I; J += I; } } ++I; } /* Print the result */ for (I = 2; I < COUNT; ++I) { if (Sieve[I] == 0) { printf ("%4d\n", I); } if (kbhit() && cgetc() == 'q') { break; } } return 0; }