35 lines
724 B
Text
35 lines
724 B
Text
MODULE AdditivePrimes;
|
|
|
|
IMPORT
|
|
Out, Primes;
|
|
|
|
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;
|
|
|
|
BEGIN
|
|
Primes.sieve( Prime );
|
|
FOR n := 2 TO Max DO
|
|
IF Prime[ n ] & Prime[ DigitSum( n ) ] THEN
|
|
Out.Int( n, 4 );
|
|
INC( Count );
|
|
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.
|