begin
comment
-- From the NASE A60 distribution --
calculation of the prime numbers between 2 and 200
;
integer NN;
NN := 200;
begin
comment first algorithm (check division in a loop) ;
boolean procedure ISPRIME (N);
value N;
integer N;
begin
boolean procedure EVEN (N);
value N; integer N;
EVEN := ENTIER (N / 2) * 2 = N;
integer I;
ISPRIME := FALSE;
if EVEN (N) & N != 2 then
goto RET;
for I := 3 step 2 until N 'DIV' 2 do
if ENTIER (N / I) * I = N then
goto RET;
ISPRIME := TRUE;
RET:
end;
integer I;
PRINTSLN (`FIRST:');
for I := 2 step 1 until NN do
if ISPRIME (I) then
PRINTNLN (I);
PRINTSLN (`DONE.')
end;
begin
comment second algorithm (sieve) ;
boolean array ARR [2 : NN];
integer I, J;
PRINTSLN (`SECOND:');
for I := 2 step 1 until NN do
ARR [I] := TRUE;
for I := 2 step 1 until NN 'DIV' 2 do
for J := 2 * I step I until NN do
ARR [J] := FALSE;
for I := 2 step 1 until NN do
if ARR [I] then
PRINTNLN (I);
PRINTSLN (`DONE.')
end
end