use strict;
use warnings;
use ntheory qw/factorial todigits/;

my $limit = 1500000;

for my $b (9 .. 12) {
    print "Factorions in base $b:\n";
    $_ == factorial($_) and print "$_ " for 0..$b-1;

    for my $i (1 .. int $limit/$b) {
        my $sum;
        my $prod = $i * $b;

        for (reverse todigits($i, $b)) {
            $sum += factorial($_);
            $sum = 0 && last if $sum > $prod;
        }

        next if $sum == 0;
        ($sum + factorial($_) == $prod + $_) and print $prod+$_ . ' ' for 0..$b-1;
    }
    print "\n\n";
}