home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 September / pcwk_09_96.iso / demo / wgelectr / pk51demo / files.2 / EXAMPLES / SSIEVE / SIEVE.C < prev    next >
C/C++ Source or Header  |  1995-06-08  |  1KB  |  47 lines

  1. /*------------------------------------------------------------------------------
  2. SIEVE.C:  Eratosthenes Sieve Prime Number Program in C from Byte Jan 1983.
  3. ------------------------------------------------------------------------------*/
  4.  
  5. #include <stdio.h>
  6. #include <reg51.h>
  7.  
  8.  
  9. #define TRUE 1
  10. #define FALSE 0
  11. #define SIZE 8190
  12.  
  13. xdata char flags[SIZE+1];
  14.  
  15. void main()
  16.   {
  17.     register int i,k;
  18.     int prime,count,iter;
  19.  
  20.   SCON = 0x52;    /* SCON */
  21.   TMOD = 0x20;    /* TMOD */
  22.   TCON = 0x69;    /* TCON */
  23.   TH1 =  0xf3;    /* TH1 */
  24.  
  25.  
  26.     printf("10 iterations\n");
  27.     for (iter = 1; iter <= 10; iter++)        /* do program 10 times */
  28.       {    
  29.     count = 0;            /* initialize prime counter */
  30.     for (i = 0; i <= SIZE; i++)    /* set all flags true */
  31.       flags[i] = TRUE;
  32.     for (i = 0; i <= SIZE; i++)
  33.       {
  34.         if (flags[i])        /* found a prime */
  35.           {
  36.         prime = i + i + 3;    /* twice index + 3 */
  37.         for (k = i + prime; k <= SIZE; k += prime)
  38.           flags[k] = FALSE;    /* kill all multiples */
  39.         count++;        /* primes found */
  40.           }
  41.       }
  42.       }
  43.     printf("%d primes.\n",count);        /*primes found in 10th pass */
  44.  
  45.     while (1);
  46.   }
  47.