59 lines
1.4 KiB
Text
59 lines
1.4 KiB
Text
digits = iter (n: int) yields (int)
|
|
while n>0 do
|
|
yield(n//10)
|
|
n := n/10
|
|
end
|
|
end digits
|
|
|
|
mdr = proc (n: int) returns (int,int)
|
|
i: int := 0
|
|
while n>=10 do
|
|
m: int := 1
|
|
for d: int in digits(n) do
|
|
m := m * d
|
|
end
|
|
n := m
|
|
i := i+1
|
|
end
|
|
return (i,n)
|
|
end mdr
|
|
|
|
first_mdr = iter (target_mdr, n: int) yields (int)
|
|
i: int := 0
|
|
while n>0 do
|
|
x, m: int := mdr(i)
|
|
if m=target_mdr then
|
|
yield(i)
|
|
n := n -1
|
|
end
|
|
i := i+1
|
|
end
|
|
end first_mdr
|
|
|
|
start_up = proc ()
|
|
po: stream := stream$primary_output()
|
|
nums: sequence[int] := sequence[int]$[123321, 7739, 893, 899998]
|
|
|
|
stream$putl(po, " N MDR MP")
|
|
stream$putl(po, "====== === ==")
|
|
for num: int in sequence[int]$elements(nums) do
|
|
stream$putright(po, int$unparse(num), 6)
|
|
stream$puts(po, " ")
|
|
i, m: int := mdr(num)
|
|
stream$putright(po, int$unparse(m), 3)
|
|
stream$puts(po, " ")
|
|
stream$putright(po, int$unparse(i), 3)
|
|
stream$putl(po, "")
|
|
end
|
|
|
|
stream$putl(po, "\nMDR: [n0..n4]")
|
|
stream$putl(po, "=== ========")
|
|
for dgt: int in int$from_to(0,9) do
|
|
stream$putright(po, int$unparse(dgt), 3)
|
|
stream$puts(po, ": ")
|
|
for num: int in first_mdr(dgt, 5) do
|
|
stream$puts(po, int$unparse(num) || " ")
|
|
end
|
|
stream$putl(po, "")
|
|
end
|
|
end start_up
|