RosettaCodeData/Task/Additive-primes/ALGOL-60/additive-primes.alg
2025-06-11 20:16:52 -04:00

60 lines
1.3 KiB
Text

begin
integer procedure sumdigits(n);
value n; integer n;
begin
integer q, sum;
sum := 0;
for sum := sum while n > 0 do
begin
q := entier(n / 10);
sum := sum + (n - q * 10);
n := q;
end;
sumdigits := sum;
end;
boolean procedure isprime(n);
value n; integer n;
begin
if n < 2 then
isprime := false
else if n = entier(n / 2) * 2 then
isprime := (n = 2)
else
begin
comment - check odd divisors up to sqrt(n);
integer i, limit;
boolean divisible;
i := 3;
limit := entier(sqrt(n));
divisible := false;
for i := i while i <= limit and not divisible do
begin
if entier(n / i) * i = n then
divisible := true;
i := i + 2
end;
isprime := not divisible;
end;
end;
integer i, count;
outstring(1,"Looking up to 500 for additive primes\n");
count := 0;
for i := 2 step 1 until 500 do
if isprime(i) then
begin
if isprime(sumdigits(i)) then
begin
outinteger(1,i);
count := count + 1;
if count = entier(count / 10) * 10 then
outstring(1,"\n");
end;
end;
outstring(1,"\n");
outinteger(1,count);
outstring(1,"were found\n");
end