How to find all the numbers that are equal to the sum of the factorials of their digits in PHP

1 Answer

0 votes
// Example: 145 = 1! + 4! + 5! = 1 + 24 + 120 = 145

// Function to compute the factorial of a number
function factorial(int $n): int {
    $fact = 1;
    
    for ($i = 2; $i <= $n; $i++) {
        $fact *= $i;
    }
    
    return $fact;
}

// Function to find all numbers equal to the sum of the factorials of their digits
function findDigitFactorialNumbers(): void {
    // Precompute factorials of digits 0-9
    $factorials = [];
    for ($i = 0; $i <= 9; $i++) {
        $factorials[$i] = factorial($i);
    }

    // Define an upper limit (7 * 9! is a safe limit for this problem)
    $upperLimit = 7 * $factorials[9];

    // Iterate through all numbers and check the condition
    for ($num = 10; $num <= $upperLimit; $num++) {
        $sum = 0;
        $temp = $num;

        // Calculate the sum of factorials of digits
        while ($temp > 0) {
            $digit = $temp % 10;
            $sum += $factorials[$digit];
            $temp = intdiv($temp, 10);
        }

        // Check if the number equals the sum of the factorials of its digits
        if ($sum === $num) {
            echo "$num is a digit factorial number.\n";
        }
    }
}

findDigitFactorialNumbers();



/*
run:

145 is a digit factorial number.
40585 is a digit factorial number.

*/

 



answered Nov 9, 2025 by avibootz
...