begin
library A1, A4, A5, A15;
comment after Knuth and Merner, CACM June 1961;
integer procedure GPS(j, n, z, v); integer j, n, z, v;
begin
for j := 1 step 1 until n do z := v;
GPS := 1
end
integer procedure rem(n, d); value n, d; integer n, d;
rem := n - d * (n ÷ d);
boolean procedure is special(n, r); value n, r; integer n, r;
is special := rem(n, 10) = r and n ÷ 10 ne 1;
integer j, a, m, p, z;
open(30);
for m := 1 step 1 until 30 *
GPS
(
j,
if j = 0 then -1 else j,
p,
if j = 1 then 1
else
if GPS
(
a,
j,
z,
if a = 1 then 1
else ( if rem(j, a) = 0 and a < j then 0 else z)
) = z
then ( if p < m then p + 1 else j * GPS(a, 1, j, -1))
else p
)
do
begin
writetext(30, {The {s}});
write(30, format({nddd}), m);
if is special(m) in having units digit:(1) then writetext(30, {st _ }) else
if is special(m) in having units digit:(2) then writetext(30, {nd _ }) else
if is special(m) in having units digit:(3) then writetext(30, {rd _ }) else
writetext(30, {th _ });
writetext(30, {prime _ is _ });
write(30, format({ndddc}), p);
end
close(30)
end
|