//ALGOL601 JOB
//JOBLIB DD DSN=SYS1.ALGLIB,DISP=SHR
//SALGOL EXEC ALGOFCLG
//ALGOL.SYSIN DD *
begin
comment
//////////////////////////////////////////////////////////
// NAME: PETER M. MAURER
// PROGRAM: SIEVE OF ERATOSTHENES
// DUE: NEVER
// LANGUAGE: ALGOL 60 ALA IBM 360
// http://cs.ecs.baylor.edu/~maurer/SieveE/Algol360.htm
//////////////////////////////////////////////////////////
;
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
SYSACT(1,6,120);
SYSACT(1,8,62);
SYSACT(1,12,1);
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 less 1000 do
begin
comment ADVANCE TO THE NEXT UN-CROSSED OUT. ;
comment THIS NUMBER MUST BE A PRIME;
for I := I while I less 1000
and CANDIDATES(/I/) equal 0 do
begin
I := I+1;
end;
comment INSURE AGAINST RUNNING OFF THE END;
if I less 1000 then
begin
comment CROSS OUT ALL MULTIPLES OF THE PRIME.;
J := 2;
K := J*I;
for K := K while K less 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/) notequal 0 then
begin
OUTINTEGER(1,I);
OUTSTRING(1,'(' IS PRIME')');
SYSACT(1,14,1)
end
end
end
/*
//GO.ALGLDD01 DD DSN=&&DD01,UNIT=SYSDA,DISP=(,PASS),SPACE=(CYL,20), 00200000
// DCB=(RECFM=FBA,LRECL=121,BLKSIZE=605) 00210000
//GO.SYSPRINT DD DSN=&&SYSP,UNIT=SYSDA,DISP=(,PASS),SPACE=(CYL,20), 00220000
// DCB=(RECFM=FBA,LRECL=121,BLKSIZE=605) 00230000
//PTPCH01 EXEC PGM=IEBPTPCH,COND=(0,NE,SALGOL.GO) 00240000
//SYSPRINT DD DUMMY 00250000
//SYSIN DD * 00260000
PRINT PREFORM=A 00270000
/* 00280000
//SYSUT1 DD DSN=&&SYSP,DISP=(OLD,PASS) 00290000
//SYSUT2 DD SYSOUT=A 00300000
//PTPCH02 EXEC PGM=IEBPTPCH,COND=(0,NE,SALGOL.GO) 00310000
//SYSPRINT DD DUMMY 00320000
//SYSIN DD * 00330000
PRINT PREFORM=A 00340000
/* 00350000
//SYSUT1 DD DSN=&&DD01,DISP=(OLD,PASS) 00360000
//SYSUT2 DD SYSOUT=A 00370000
//