Additive primes: Difference between revisions

Content added Content deleted
m (Minor edit to Forth code)
(Added Algol W)
Line 17: Line 17:
:*   the prime-numbers fandom: [https://prime-numbers.fandom.com/wiki/Additive_Primes additive primes].
:*   the prime-numbers fandom: [https://prime-numbers.fandom.com/wiki/Additive_Primes additive primes].
<br><br>
<br><br>

=={{header|ALGOL W}}==
<lang algolw>begin % find some additive primes - primes whose digit sum is also prime %
% sets p( 1 :: n ) to a sieve of primes up to n %
procedure Eratosthenes ( logical array p( * ) ; integer value n ) ;
begin
p( 1 ) := false; p( 2 ) := true;
for i := 3 step 2 until n do p( i ) := true;
for i := 4 step 2 until n do p( i ) := false;
for i := 3 step 2 until truncate( sqrt( n ) ) do begin
integer ii; ii := i + i;
if p( i ) then for pr := i * i step ii until n do p( pr ) := false
end for_i ;
end Eratosthenes ;
integer MAX_NUMBER;
MAX_NUMBER := 500;
begin
logical array prime( 1 :: MAX_NUMBER );
integer aCount;
% sieve the primes to MAX_NUMBER %
Eratosthenes( prime, MAX_NUMBER );
% find the primes that are additive primes %
aCount := 0;
for i := 1 until MAX_NUMBER do begin
if prime( i ) then begin
integer dSum, v;
v := i;
dSum := 0;
while v > 0 do begin
dSum := dSum + v rem 10;
v := v div 10
end while_v_gt_0 ;
if prime( dSum ) then begin
writeon( i_w := 4, s_w := 0, " ", i );
aCount := aCount + 1;
if aCount rem 20 = 0 then write()
end if_prime_dSum
end if_prime_i
end for_i ;
write( i_w := 1, s_w := 0, "Found ", aCount, " additive primes below ", MAX_NUMBER )
end
end.</lang>
{{out}}
<pre>
2 3 5 7 11 23 29 41 43 47 61 67 83 89 101 113 131 137 139 151
157 173 179 191 193 197 199 223 227 229 241 263 269 281 283 311 313 317 331 337
353 359 373 379 397 401 409 421 443 449 461 463 467 487
Found 54 additive primes below 500
</pre>


=={{header|APL}}==
=={{header|APL}}==