

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


object Factorion extends App {
    private def is_factorion(i: Int, b: Int): Boolean = {
        var sum = 0L
        var j = i
        while (j > 0) {
            sum +=  f(j % b)
            j /= b
        }
        sum == i
    }
 
    private val f = Array.ofDim[Long](12)
    f(0) = 1L
    (1 until 12).foreach(n => f(n) = f(n - 1) * n)
    (9 to 12).foreach(b => {
        print(s"factorions for base $b:")
        (1 to 1500000).filter(is_factorion(_, b)).foreach(i => print(s" $i"))
        println
    })
}