Digital root/Multiplicative digital root: Difference between revisions
Content added Content deleted
(Convert to task, tidy up presentation of task description) |
(Added zkl) |
||
Line 374: | Line 374: | ||
8: (8, 18, 24, 29, 36) |
8: (8, 18, 24, 29, 36) |
||
9: (9, 19, 33, 91, 119) |
9: (9, 19, 33, 91, 119) |
||
</pre> |
|||
=={{header|zkl}}== |
|||
{{trans|Python}} |
|||
<lang zkl>fcn mdroot(n){ // Multiplicative digital root |
|||
mdr := List(n); |
|||
while (mdr[-1] > 9){ |
|||
mdr.append(mdr[-1].toString().apply("toInt").reduce('*,1)); |
|||
} |
|||
return(mdr.len() - 1, mdr[-1]); |
|||
}</lang> |
|||
<lang zkl>fcn mdroot(n){ |
|||
count:=0; mdr:=n; |
|||
while(mdr > 9){ |
|||
m:=mdr; digitsMul:=1; |
|||
while(m){ |
|||
reg md; |
|||
m,md=m.divr(10); |
|||
digitsMul *= md; |
|||
} |
|||
mdr = digitsMul; |
|||
count += 1; |
|||
} |
|||
return(count, mdr); |
|||
}</lang> |
|||
<lang zkl>println("Number: (MP, MDR)\n======= ========="); |
|||
foreach n in (T(123321, 7739, 893, 899998)) |
|||
{ println("%7,d: %s".fmt(n, mdroot(n))) } |
|||
table:=D([0..9].zip(fcn{List()}).walk()); // dictionary(0:List, 1:List, ...) |
|||
n :=0; |
|||
while(table.values.filter(fcn(r){r.len()<5})){ // until each entry has >=5 values |
|||
mpersistence, mdr := mdroot(n); |
|||
table[mdr].append(n); |
|||
n += 1; |
|||
} |
|||
println("\nMP: [n0..n4]\n== ========"); |
|||
foreach mp in (table.keys.sort()){ |
|||
println("%2d: %s".fmt(mp, table[mp][0,5])); //print first five values |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Number: (MP, MDR) |
|||
======= ========= |
|||
123,321: L(3,8) |
|||
7,739: L(3,8) |
|||
893: L(3,2) |
|||
899,998: L(2,0) |
|||
MP: [n0..n4] |
|||
== ======== |
|||
0: L(0,10,20,25,30) |
|||
1: L(1,11,111,1111,11111) |
|||
2: L(2,12,21,26,34) |
|||
3: L(3,13,31,113,131) |
|||
4: L(4,14,22,27,39) |
|||
5: L(5,15,35,51,53) |
|||
6: L(6,16,23,28,32) |
|||
7: L(7,17,71,117,171) |
|||
8: L(8,18,24,29,36) |
|||
9: L(9,19,33,91,119) |
|||
</pre> |
</pre> |