login
A031347
Multiplicative digital root of n (keep multiplying digits of n until reaching a single digit).
67
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 4, 6, 8, 0, 2, 4, 6, 8, 0, 3, 6, 9, 2, 5, 8, 2, 8, 4, 0, 4, 8, 2, 6, 0, 8, 6, 6, 8, 0, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 6, 2, 8, 8, 0, 8, 8, 6, 0, 0, 7, 4, 2, 6, 5, 8, 8, 0, 8, 0, 8, 6, 8, 6, 0, 6
OFFSET
0,3
COMMENTS
a(n) = 0 for almost all n. - Charles R Greathouse IV, Oct 02 2013
More precisely, a(n) = 0 asymptotically almost surely, namely, among others, for all numbers n which have a digit '0', and as n has more and more digits, it becomes increasingly less probable that no digit is equal to zero. (The set A011540 has density 1.) Thus the density of numbers for which a(n) > 0 is zero, although this happens for infinitely many numbers, for example all repunits n = (10^k - 1)/9 = A002275(k). - M. F. Hasler, Oct 11 2015
FORMULA
a(n) = d in {1, ..., 9} if (but not only if) n = (10^k - 1)/9 + (d - 1)*10^m = A002275(k) + (d - 1)*A011557(m) for some k > m >= 0. - M. F. Hasler, Oct 11 2015
MAPLE
A007954 := proc(n) return mul(d, d=convert(n, base, 10)): end: A031347 := proc(n) local m: m:=n: while(length(m)>1)do m:=A007954(m): od: return m: end: seq(A031347(n), n=0..100); # Nathaniel Johnston, May 04 2011
MATHEMATICA
mdr[n_] := NestWhile[Times @@ IntegerDigits@# &, n, UnsameQ, All]; Table[ mdr[n], {n, 0, 104}] (* Robert G. Wilson v, Aug 04 2006 *)
Table[NestWhile[Times@@IntegerDigits[#] &, n, # > 9 &], {n, 0, 90}] (* Harvey P. Dale, Mar 10 2019 *)
PROG
(PARI) A031347(n)=local(resul); if(n<10, return(n) ); resul = n % 10; n = (n - n%10)/10; while( n > 0, resul *= n %10; n = (n - n%10)/10; ); return(A031347(resul))
for(n=1, 80, print1(A031347(n), ", ")) \\ R. J. Mathar, May 23 2006
(PARI) A031347(n)={while(n>9, n=prod(i=1, #n=digits(n), n[i])); n} \\ M. F. Hasler, Dec 07 2014
(Haskell)
a031347 = until (< 10) a007954
-- Reinhard Zumkeller, Oct 17 2011, Sep 22 2011
(Python)
from operator import mul
from functools import reduce
def A031347(n):
while n > 9:
n = reduce(mul, (int(d) for d in str(n)))
return n
# Chai Wah Wu, Aug 23 2014
(Python)
from math import prod
def A031347(n):
while n > 9: n = prod(map(int, str(n)))
return n
print([A031347(n) for n in range(100)]) # Michael S. Branicky, Apr 17 2024
(Scala) def iterDigitProd(n: Int): Int = n.toString.length match {
case 1 => n
case _ => iterDigitProd(n.toString.toCharArray.map(_ - 48).scanRight(1)(_ * _).head)
}
(0 to 99).map(iterDigitProd) // Alonso del Arte, Apr 11 2020
CROSSREFS
Cf. A007954, A007953, A003001, A010888 (additive digital root of n), A031286 (additive persistence of n), A031346 (multiplicative persistence of n).
Numbers having multiplicative digital roots 0-9: A034048, A002275, A034049, A034050, A034051, A034052, A034053, A034054, A034055, A034056.
Sequence in context: A175420 A062078 A371281 * A087471 A128212 A187844
KEYWORD
nonn,base,easy,nice
STATUS
approved