home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 September / PCWK996.iso / demo / wgelectr / pk51demo / files.2 / EXAMPLES / LSIEVE / SIEVE.C < prev   
C/C++ Source or Header  |  1995-06-08  |  1KB  |  46 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. #define TRUE 1
  9. #define FALSE 0
  10. #define SIZE 8190
  11.  
  12. xdata char flags[SIZE+1];
  13.  
  14. void main()
  15.   {
  16.     register int i,k;
  17.     int prime,count,iter;
  18.  
  19.   SCON = 0x52;    /* SCON */
  20.   TMOD = 0x20;    /* TMOD */
  21.   TCON = 0x69;    /* TCON */
  22.   TH1 =  0xf3;    /* TH1 */
  23.  
  24.  
  25.     printf("10 iterations\n");
  26.     for (iter = 1; iter <= 10; iter++)        /* do program 10 times */
  27.       {    
  28.     count = 0;            /* initialize prime counter */
  29.     for (i = 0; i <= SIZE; i++)    /* set all flags true */
  30.       flags[i] = TRUE;
  31.     for (i = 0; i <= SIZE; i++)
  32.       {
  33.         if (flags[i])        /* found a prime */
  34.           {
  35.         prime = i + i + 3;    /* twice index + 3 */
  36.         for (k = i + prime; k <= SIZE; k += prime)
  37.           flags[k] = FALSE;    /* kill all multiples */
  38.         count++;        /* primes found */
  39.           }
  40.       }
  41.       }
  42.     printf("%d primes.\n",count);        /*primes found in 10th pass */
  43.  
  44.     while (1);
  45.   }
  46.