home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / euphor10.zip / SIEVE.C < prev    next >
C/C++ Source or Header  |  1993-05-07  |  1KB  |  52 lines

  1. #define ITERATIONS 10000
  2.  
  3. #include <stdio.h>
  4. #include <time.h>
  5.  
  6. #define SIZE 8190
  7. #define ON 1
  8. #define OFF 0
  9.  
  10. char flags[SIZE + 1];
  11.  
  12. SetBlock(var, size, val)
  13. register char *var;
  14. register int size;
  15. register char val;
  16. {
  17.     /*register*/ int i;
  18.  
  19.     for (i = 0; i < size; i++)
  20.         var[i] = val;
  21. }
  22.  
  23.  
  24. main()
  25. {
  26. /*register*/ int count, i, k, prime;
  27.     int iter;    
  28.     int t;
  29.  
  30.     t = clock();
  31.     for (iter = 1; iter <= ITERATIONS; iter++) {
  32.         count = 0;
  33.         /* turn flags on (non-zero) */
  34.         SetBlock(flags, SIZE, ON);
  35.         for (i = 0; i <= SIZE; i++) {
  36.             if (flags[i]) {
  37.                 prime = i + i + 3;
  38.               /*  printf("%d  ", prime); */ 
  39.                 k = prime + i;
  40.                 while(k <= SIZE) {
  41.                     flags[k] = OFF;
  42.                     k = k + prime;
  43.                 } 
  44.                 count++;
  45.             }
  46.         }
  47.     }
  48.     printf("%d primes\n", count);
  49.     printf("%d iterations in %.2f seconds\n", ITERATIONS, 
  50.        (clock() - t)/(double)CLOCKS_PER_SEC);
  51. }
  52.