65 lines
1.2 KiB
Plaintext
65 lines
1.2 KiB
Plaintext
BEGIN
|
|
|
|
% RETURN N MOD M %
|
|
INTEGER FUNCTION MOD(N, M);
|
|
INTEGER N, M;
|
|
BEGIN
|
|
MOD := N - (N / M) * M;
|
|
END;
|
|
|
|
% RETURN 1 IF N IS PRIME, OTHERWISE 0 %
|
|
INTEGER FUNCTION ISPRIME(N);
|
|
INTEGER N;
|
|
BEGIN
|
|
IF N = 2 THEN
|
|
ISPRIME := 1
|
|
ELSE IF (N < 2) OR (MOD(N,2) = 0) THEN
|
|
ISPRIME := 0
|
|
ELSE % TEST ODD DIVISORS UP TO SQRT OF N %
|
|
BEGIN
|
|
INTEGER I, DIVISIBLE;
|
|
I := 3;
|
|
DIVISIBLE := 0;
|
|
WHILE (I * I <= N) AND (DIVISIBLE = 0) DO
|
|
BEGIN
|
|
IF MOD(N,I) = 0 THEN DIVISIBLE := 1;
|
|
I := I + 2;
|
|
END;
|
|
ISPRIME := 1 - DIVISIBLE;
|
|
END;
|
|
END;
|
|
|
|
% RETURN THE SUM OF THE DIGITS OF N %
|
|
INTEGER FUNCTION SUMDIGITS(N);
|
|
INTEGER N;
|
|
BEGIN
|
|
INTEGER SUM;
|
|
SUM := 0;
|
|
WHILE N > 0 DO
|
|
BEGIN
|
|
SUM := SUM + MOD(N, 10);
|
|
N := N / 10;
|
|
END;
|
|
SUMDIGITS := SUM;
|
|
END;
|
|
|
|
% LOOK FOR ADDITIVE PRIMES IN RANGE 1 TO 500 %
|
|
INTEGER I, S, COUNT;
|
|
COUNT := 0;
|
|
FOR I := 1 STEP 1 UNTIL 500 DO
|
|
BEGIN
|
|
IF ISPRIME(I)=1 THEN
|
|
BEGIN
|
|
S := SUMDIGITS(I);
|
|
IF ISPRIME(S)=1 THEN
|
|
BEGIN
|
|
WRITEON(I);
|
|
COUNT := COUNT + 1;
|
|
IF MOD(COUNT,8) = 0 THEN WRITE("");
|
|
END;
|
|
END;
|
|
END;
|
|
WRITE(COUNT," ADDITIVE PRIMES WERE FOUND");
|
|
|
|
END
|