45 lines
914 B
Plaintext
45 lines
914 B
Plaintext
MODULE AdditivePrimes EXPORTS Main;
|
|
|
|
IMPORT SIO,Fmt;
|
|
|
|
CONST
|
|
Max = 500;
|
|
|
|
VAR
|
|
Count:CARDINAL := 0;
|
|
Prime:ARRAY[2..Max] OF BOOLEAN;
|
|
|
|
PROCEDURE DigitSum(N:CARDINAL):CARDINAL =
|
|
BEGIN
|
|
IF N < 10 THEN RETURN N
|
|
ELSE RETURN (N MOD 10) + DigitSum(N DIV 10) END;
|
|
END DigitSum;
|
|
|
|
PROCEDURE Sieve() =
|
|
VAR J:CARDINAL;
|
|
BEGIN
|
|
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;
|
|
INC(J,I)
|
|
END
|
|
END
|
|
END;
|
|
END Sieve;
|
|
|
|
BEGIN
|
|
Sieve();
|
|
FOR N := 2 TO Max DO
|
|
IF Prime[N] AND Prime[DigitSum(N)] THEN
|
|
SIO.PutText(Fmt.F("%4s",Fmt.Int(N)));
|
|
INC(Count);
|
|
IF Count MOD 10 = 0 THEN SIO.Nl() END
|
|
END
|
|
END;
|
|
SIO.PutText(Fmt.F("\nThere are %s additive primes less than %s.\n",
|
|
Fmt.Int(Count),Fmt.Int(Max)));
|
|
END AdditivePrimes.
|