RosettaCodeData/Task/Digital-root-Multiplicative-digital-root/Phix/digital-root-multiplicative-digital-root.phix
2018-08-17 15:15:24 +01:00

39 lines
884 B
Text

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