begin
comment
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) and N notequal 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;
VPRINT ("FIRST:");
for I := 2 step 1 until NN do
if ISPRIME (I) then
OUTINTEGER (1, I);
VPRINT ("\NDONE.")
end;
begin
comment SECOND ALGORITHM (SIEVE) ;
boolean array ARR [2 : NN];
integer I, J;
VPRINT ("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
OUTINTEGER (1, I);
VPRINT ("\NDONE.")
end
end