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 |