home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / modula1 / sieve.mod < prev    next >
Text File  |  1987-06-11  |  896b  |  34 lines

  1. (* Compute a table of the first n primes numbers.  Print m
  2.    numbers per line.  Use the method of the sieve of Erasthenes. *)
  3.  
  4. MODULE sieve;
  5.  
  6. FROM Terminal IMPORT WriteString, WriteLn;
  7. FROM InOut    IMPORT WriteCard;
  8.  
  9. CONST size = 8190;
  10.       m = 10;
  11.  
  12. VAR flags: ARRAY[0..size] OF BOOLEAN;
  13.     i,prime,k,count: INTEGER;
  14.  
  15. BEGIN
  16.   count := 0;
  17.   FOR i := 0 TO size DO flags[i] := TRUE END;
  18.   FOR i := 0 TO size DO
  19.     IF flags[i] THEN
  20.       prime := i+i+3;
  21.       k := i+prime;
  22.       WHILE k <= size DO
  23.         flags[k] := FALSE;
  24.         INC(k,prime)
  25.       END;
  26.       INC(count);
  27.       WriteCard(prime,8);
  28.       IF count MOD m = 0 THEN WriteLn END
  29.     END
  30.   END;
  31.   WriteLn; WriteCard(count,0);
  32.   WriteString(' primes'); WriteLn
  33. END sieve.
  34.