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
LINKS
T. D. Noe, Table of n, a(n) for n = 0..10000
Eric Weisstein's World of Mathematics, Multiplicative Digital Root.
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
KEYWORD
nonn,base,easy,nice,changed
AUTHOR
STATUS
approved