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