racket/collects/algol60/examples/primes.a60
2005-05-27 18:56:37 +00:00

68 lines
1.8 KiB
Plaintext

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