begin
comment
//////////////////////////////////////////////////////////
// NAME: PETER M. MAURER
// PROGRAM: SIEVE OF ERATOSTHENES
// DUE: NEVER
// LANGUAGE: ALGOL 60 ALA IBM 360
//////////////////////////////////////////////////////////
;
comment DEFINE THE SIEVE DATA STRUCTURE ;
integer array CANDIDATES[0:1000];
integer I,J,K;
comment SET LINE-LENGTH=120,SET LINES-PER-PAGE=62,OPEN ;
comment 1000 TO PROTECT AGAINST STRICT EVALUATION OF AND ;
for I ≔ 0 step 1 until 1000 do
begin
comment EVERYTHING IS POTENTIALLY PRIME UNTIL PROVEN OTHERWISE ;
CANDIDATES[I] ≔ 1;
end;
comment NEITHER 1 NOR 0 IS PRIME, SO FLAG THEM OFF ;
CANDIDATES[0] ≔ 0;
CANDIDATES[1] ≔ 0;
comment START THE SIEVE WITH THE INTEGER 0 ;
I ≔ 0;
for I ≔ I while I < 1000 do
begin
comment ADVANCE TO THE NEXT UN-CROSSED OUT. ;
comment THIS NUMBER MUST BE A PRIME;
for I ≔ I while I < 1000 ∧ CANDIDATES[I] = 0 do
begin
I ≔ I+1;
end;
comment INSURE AGAINST RUNNING OFF THE END;
if I < 1000 then
begin
comment CROSS OUT ALL MULTIPLES OF THE PRIME.;
J ≔ 2;
K ≔ J×I;
for K ≔ K while K < 1000 do
begin
CANDIDATES[K] ≔ 0;
J ≔ J + 1;
K ≔ J×I;
end;
comment ADVANCE TO THE NEXT CANDIDATE ;
I ≔ I+1;
end
end;
comment ALL UNCROSSED OUT NUMBERS ARE PRIME;
comment PRINT ALL PRIMES ;
for I ≔ 0 step 1 until 999 do
begin
if CANDIDATES[I] ≠ 0 then
begin
OUTINTEGER(1,I);
OUTSTRING(1,“ IS PRIME”);
end
end
end