40 lines
844 B
Text
40 lines
844 B
Text
proc sieve([*] bool prime) void:
|
|
word max, p, c;
|
|
max := dim(prime,1)-1;
|
|
prime[0] := false;
|
|
prime[1] := false;
|
|
for p from 2 upto max do prime[p] := true od;
|
|
for p from 2 upto max/2 do
|
|
for c from p*2 by p upto max do
|
|
prime[c] := false
|
|
od
|
|
od
|
|
corp
|
|
|
|
proc digit_sum(word num) byte:
|
|
byte sum;
|
|
sum := 0;
|
|
while
|
|
sum := sum + num % 10;
|
|
num := num / 10;
|
|
num /= 0
|
|
do od;
|
|
sum
|
|
corp
|
|
|
|
proc main() void:
|
|
word MAX = 500;
|
|
word p, n;
|
|
[MAX]bool prime;
|
|
sieve(prime);
|
|
n := 0;
|
|
for p from 2 upto MAX-1 do
|
|
if prime[p] and prime[digit_sum(p)] then
|
|
write(p:4);
|
|
n := n + 1;
|
|
if n % 20 = 0 then writeln() fi
|
|
fi
|
|
od;
|
|
writeln();
|
|
writeln("There are ", n, " additive primes below ", MAX)
|
|
corp
|