function mdr_mp(integer m) integer mp = 0 while m>9 do integer newm = 1 while m do newm *= remainder(m,10) m = floor(m/10) end while m = newm mp += 1 end while return {m,mp} end function constant tests = {123321, 7739, 893, 899998} printf(1,"Number MDR MP\n") printf(1,"====== === ==\n") for i=1 to length(tests) do integer ti = tests[i] printf(1,"%6d %6d %6d\n",ti&mdr_mp(ti)) end for integer i=0, found = 0 sequence res = repeat({},10) while found<50 do integer {mdr,mp} = mdr_mp(i) if length(res[mdr+1])<5 then res[mdr+1] &= i found += 1 end if i += 1 end while printf(1,"\nMDR 1 2 3 4 5") printf(1,"\n=== ===========================\n") for i=1 to 10 do printf(1,"%2d %5d %5d %5d %5d %5d\n",prepend(res[i],i-1)) end for