GPSPRIMES|
begin
comment 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 ± 1;
integer j, a, m, p, z;
open(10);
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(10, [The [s_]]);
write(10, format([nddd_]), m);
if is special(m) in having units digit:(1) then writetext(10, [st *]) else
if is special(m) in having units digit:(2) then writetext(10, [nd *]) else
if is special(m) in having units digit:(3) then writetext(10, [rd *]) else
writetext(10, [th * ]);
writetext(10, [prime * is * ]);
write(10, format([ndddc_]), p);
end;
close(10)
end
|