68 lines
1.8 KiB
Plaintext
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
|