MODULE Primes; CONST N = 20 (*252*); M = 16; (* M ~ sqrt(N) *) LL = 10; (* no. of primes placed on a line *) VAR i, k, x : CARDINAL; inc, lim, square, L : CARDINAL; prime : BOOLEAN; P, V : ARRAY[0..M] OF CARDINAL; r, c : CARDINAL; BEGIN x := 1; inc := 4; lim := 1; square := 9; FOR i := 3 TO N DO (* find next prime number p[i] *) r := 0; REPEAT INC(r); x := x + inc; inc := 6 - inc; IF square <= x THEN lim := lim + 1; V[lim] := square; square := P[lim+1] * P[lim+1]; END; (* IF *) k := 2; prime := TRUE; c := 0; WHILE prime & (k < lim) DO INC(c); k := k + 1; IF V[k] < x THEN V[k] := V[k] + 2 * P[k]; END; (* IF *) prime := x # V[k]; END; (* WHILE *) UNTIL prime; IF i <= M THEN P[i] := x; END; (* IF *) WRITE(x); L := L + 1; IF L = LL THEN WRITELN; L := 0; END; (* IF *) END; (* FOR *) END Primes.