Additive primes: Difference between revisions
Content added Content deleted
Langurmonkey (talk | contribs) |
(Added Oberon-07) |
||
Line 2,681: | Line 2,681: | ||
Number of additive primes found: 54</pre> |
Number of additive primes found: 54</pre> |
||
=={{header|Oberon-07}}== |
|||
{{Trans|Modula-3}} |
|||
<syntaxhighlight lang="modula2"> |
|||
MODULE AdditivePrimes; |
|||
IMPORT |
|||
Out; |
|||
CONST |
|||
Max = 500; |
|||
VAR |
|||
Count, n :INTEGER; |
|||
Prime :ARRAY Max + 1 OF BOOLEAN; |
|||
PROCEDURE DigitSum( n :INTEGER ):INTEGER; |
|||
VAR result :INTEGER; |
|||
BEGIN |
|||
result := 0; |
|||
IF n < 10 THEN result := n |
|||
ELSE result := ( n MOD 10 ) + DigitSum( n DIV 10 ) |
|||
END |
|||
RETURN result |
|||
END DigitSum; |
|||
PROCEDURE Sieve; |
|||
VAR i, j :INTEGER; |
|||
BEGIN |
|||
Prime[ 0 ] := FALSE; Prime[ 1 ] := FALSE; |
|||
FOR i := 2 TO Max DO Prime[ i ] := TRUE END; |
|||
FOR i := 2 TO Max DIV 2 DO |
|||
IF Prime[ i ] THEN |
|||
j := i * 2; |
|||
WHILE j <= Max DO |
|||
Prime[ j ] := FALSE; |
|||
j := j + i |
|||
END |
|||
END |
|||
END |
|||
END Sieve; |
|||
BEGIN |
|||
Sieve; |
|||
FOR n := 2 TO Max DO |
|||
IF Prime[ n ] & Prime[ DigitSum( n ) ] THEN |
|||
Out.Int( n, 4 ); |
|||
Count := Count + 1; |
|||
IF Count MOD 20 = 0 THEN Out.Ln END |
|||
END |
|||
END; |
|||
Out.Ln;Out.String( "There are " );Out.Int( Count, 1 ); |
|||
Out.String( " additive primes less than " );Out.Int( Max, 1 ); |
|||
Out.String( "." );Out.Ln |
|||
END AdditivePrimes. |
|||
</syntaxhighlight> |
|||
{{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 |
|||
There are 54 additive primes less than 500. |
|||
</pre> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |