mirror of
https://github.com/cc65/cc65.git
synced 2024-12-25 17:29:50 +00:00
68 lines
1.2 KiB
C
68 lines
1.2 KiB
C
|
/*
|
||
|
* 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;
|
||
|
}
|
||
|
|
||
|
|
||
|
|