home *** CD-ROM | disk | FTP | other *** search
- (* Compute a table of the first n prime numbers.
- Print m numbers per line. *)
-
- MODULE primes;
-
- FROM InOut IMPORT WriteLn, WriteCard;
-
- CONST N = 500;
- M = 23; (* M ~ sqrt(N) *)
- LL = 10; (* # 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;
-
- BEGIN
- L := 0; x := 1; inc := 4;
- lim := 1; square := 9;
- FOR i := 3 TO N DO
- (* find next prime number p[i] *)
- REPEAT
- x := x+inc;
- inc := 6-inc;
- IF square <= x THEN
- INC(lim); V[lim] := square;
- square := P[lim+1] * P[lim+1]
- END;
- k := 2; prime := TRUE;
- WHILE prime & (k < lim) DO
- INC(k);
- IF V[k] < x THEN V[k] := V[k] + 2*P[k] END;
- prime := x # V[k]
- END
- UNTIL prime;
- IF i <= M THEN P[i] := x END;
- WriteCard(x,6); INC(L);
- IF L = LL THEN WriteLn; L := 0 END
- END
- END primes.
-