MODULE MagnanimousNumbers; FROM InOut IMPORT WriteString, WriteCard, WriteLn; VAR n, i: CARDINAL; PROCEDURE prime(n: CARDINAL): BOOLEAN; VAR d: CARDINAL; BEGIN IF n<2 THEN RETURN FALSE END; IF n MOD 2 = 0 THEN RETURN n = 2 END; IF n MOD 3 = 0 THEN RETURN n = 3 END; d := 5; WHILE d*d <= n DO IF n MOD d = 0 THEN RETURN FALSE END; INC(d, 2); IF n MOD d = 0 THEN RETURN FALSE END; INC(d, 4) END; RETURN TRUE END prime; PROCEDURE magnanimous(n: CARDINAL): BOOLEAN; VAR left, right, shift: CARDINAL; BEGIN left := n; right := 0; shift := 1; WHILE left >= 10 DO INC(right, (left MOD 10) * shift); shift := shift * 10; left := left DIV 10; IF NOT prime(left + right) THEN RETURN FALSE END END; RETURN TRUE END magnanimous; BEGIN n := 0; FOR i := 1 TO 250 DO WHILE NOT magnanimous(n) DO INC(n) END; IF i=1 THEN WriteString("1 - 45:"); WriteLn ELSIF i=240 THEN WriteString("241 - 250:"); WriteLn END; IF (i <= 45) OR (i > 240) THEN WriteCard(n, 7); IF i MOD 5 = 0 THEN WriteLn END END; INC(n) END END MagnanimousNumbers.