

Definition

A factorion is a natural number that equals the sum of the factorials of its digits.



Example
 
145   is a factorion in base 10 because:


          1! + 4! + 5!   =   1 + 24 + 120   =   145 





It can be shown (see talk page) that no factorion in base 10 can exceed   1,499,999.



Task

Write a program in your language to demonstrate, by calculating and printing out the factorions, that:

   There are   3   factorions in base   9
   There are   4   factorions in base 10
   There are   5   factorions in base 11 
   There are   2   factorions in base 12     (up to the same upper bound as for base 10)


See also

 Wikipedia article
 OEIS:A014080 - Factorions in base 10
 OEIS:A193163 - Factorions in base n


from math import fac
from strutils import join
 
iterator digits(n, base: Natural): Natural =
  ## Yield the digits of "n" in base "base".
  var n = n
  while true:
    yield n mod base
    n = n div base
    if n == 0: break
 
func isFactorion(n, base: Natural): bool =
  ## Return true if "n" is a factorion for base "base".
  var s = 0
  for d in n.digits(base):
    inc s, fac(d)
  result = s == n
 
func factorions(base, limit: Natural): seq[Natural] =
  ## Return the list of factorions for base "base" up to "limit".
  for n in 1..limit:
    if n.isFactorion(base):
      result.add(n)
 
 
for base in 9..12:
  echo "Factorions for base ", base, ':'
  echo factorions(base, 1_500_000 - 1).join(" ")