

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


BEGIN
    # cache factorials from 0 to 11 #
    [ 0 : 11 ]INT fact;
    fact[0] := 1;
    FOR n TO 11 DO
        fact[n] := fact[n-1] * n
    OD;
    FOR b FROM 9 TO 12 DO
        print( ( "The factorions for base ", whole( b, 0 ), " are:", newline ) );
        FOR i TO 1500000 - 1 DO
            INT sum := 0;
            INT j := i;
            WHILE j > 0 DO
                sum +:= fact[ j MOD b ];
                j OVERAB b
            OD;
            IF sum = i THEN print( ( whole( i, 0 ), " " ) ) FI
        OD;
        print( ( newline ) )
    OD
END