RosettaCodeData/Task/Semiprime/ALGOL-60/semiprime.alg
2026-04-30 12:34:36 -04:00

48 lines
928 B
Text

begin
comment - return a mod b;
integer procedure mod(a, b);
value a, b; integer a, b;
begin
mod := a - entier(a/b) * b;
end;
comment - return true if n is a semi-prime number;
boolean procedure semiprime(n);
value n; integer n;
begin
integer i, count;
count := 1;
i := 2;
for i := i while (i * i) <= n do
begin
if mod(n, i) = 0 then
begin
count := count + 1;
n := n / i;
end
else
i := i + 1;
end;
semiprime := (count = 2);
end;
integer i, limit, found;
limit := 100;
outstring(1,"Searching up to");
outinteger(1,limit);
outstring(1,"for semi-primes:\n");
found := 0;
for i := 3 step 1 until limit do
begin
if semiprime(i) then
begin
outinteger(1,i);
found := found + 1;
if mod(found, 10) = 0 then outstring(1,"\n");
end;
end;
outstring(1,"\n");
outinteger(1,found);
outstring(1,"were found");
end