home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / elan / demo / sieve.eln < prev    next >
Text File  |  1987-09-02  |  2KB  |  77 lines

  1.  
  2. PROC put (INT CONST a):
  3.   IF get column + int length > xsize
  4.   THEN line
  5.   FI;
  6.   put (text (a, int length))
  7. ENDPROC put;
  8.  
  9. sieve:
  10.   LET limit = 1000;
  11.   calculate int length;
  12.   prepare the sieve;
  13.   start with the first odd prime;
  14.   WHILE another prime to sieve
  15.   REP
  16.     cross out all multiples;
  17.     take the next prime
  18.   ENDREP;
  19.   print the sieve;
  20.   how long.
  21.  
  22.   calculate int length:
  23.     INT VAR lgth :: 1;
  24.     WHILE 10 ** lgth < limit
  25.     REP lgth INCR 1
  26.     ENDREP;
  27.     INT CONST int length :: lgth + 2.
  28.   
  29.   prepare the sieve:
  30.     ROW limit BOOL VAR is prime;
  31.     put ("Sieving for primes <");
  32.     put (limit);
  33.     line (2);
  34.     put (2);
  35.     call all odd numbers prime.
  36.   
  37.     call all odd numbers prime:
  38.       INT VAR i;
  39.       FOR i FROM 1 UPTO limit
  40.       REP is prime [i] := i MOD 2 = 1
  41.       ENDREP.
  42.     
  43.   start with the first odd prime:
  44.     INT VAR prime :: 3.
  45.   
  46.   another prime to sieve:
  47.     prime * prime <= limit.
  48.   
  49.   cross out all multiples:
  50.     put (prime);
  51.     INT VAR multiple :: prime * prime;
  52.     WHILE multiple <= limit
  53.     REP
  54.       is prime [multiple] := false;
  55.       multiple INCR prime
  56.     ENDREP.
  57.   
  58.   take the next prime:
  59.     REP prime INCR 2
  60.     UNTIL is prime [prime]
  61.     ENDREP.
  62.   
  63.   print the sieve:
  64.     FOR i FROM prime UPTO limit
  65.     REP
  66.       IF is prime [i]
  67.       THEN put (i)
  68.       FI
  69.     ENDREP.
  70.   
  71.   how long:
  72.     line (2);
  73.     put ("Time=");
  74.     put (exectime);
  75.     put (" sec.").
  76.   
  77.