(* Compute a table of the first n primes numbers. Print m
numbers per line. Use the method of the sieve of Erasthenes. *)
MODULE sieve;
FROM Terminal IMPORT WriteString, WriteLn;
FROM InOut IMPORT WriteCard;
CONST size = 8190;
m = 10;
VAR flags: ARRAY[0..size] OF BOOLEAN;
i,prime,k,count: INTEGER;
BEGIN
count := 0;
FOR i := 0 TO size DO flags[i] := TRUE END;
FOR i := 0 TO size DO
IF flags[i] THEN
prime := i+i+3;
k := i+prime;
WHILE k <= size DO
flags[k] := FALSE;
INC(k,prime)
END;
INC(count);
WriteCard(prime,8);
IF count MOD m = 0 THEN WriteLn END
END
END;
WriteLn; WriteCard(count,0);
WriteString(' primes'); WriteLn
END sieve.