

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


let () =
  (* cache factorials from 0 to 11 *)
  let fact = Array.make 12 0 in
  fact.(0) <- 1;
  for n = 1 to pred 12 do
    fact.(n) <- fact.(n-1) * n;
  done;
 
  for b = 9 to 12 do
    Printf.printf "The factorions for base %d are:\n" b;
    for i = 1 to pred 1_500_000 do
      let sum = ref 0 in
      let j = ref i in
      while !j > 0 do
        let d = !j mod b in
        sum := !sum + fact.(d);
        j := !j / b;
      done;
      if !sum = i then (print_int i; print_string " ")
    done;
    print_string "\n\n";
  done