home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cc65v261.zip
/
cc65.zip
/
samples
/
sieve.c
< prev
Wrap
C/C++ Source or Header
|
2000-12-18
|
1KB
|
68 lines
/*
* Calculate all primes up to a specific number.
*/
#include <stdio.h>
#include <conio.h>
/*****************************************************************************/
/* 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;
}