Check if a number is a Krishnamurthy Number or not

Last Updated : 23 Jul, 2025

A Krishnamurthy number is a number whose sum of the factorial of digits is equal to the number itself.
For example, 145 is the sum of the factorial of each digit.
1! + 4! + 5! = 1 + 24 + 120 = 145

Examples: 

Input : 145
Output : YES
Explanation: 1! + 4! + 5! =
1 + 24 + 120 = 145, which is equal to input,
hence YES.
Input : 235
Output : NO
Explanation: 2! + 3! + 5! =
2 + 6 + 120 = 128, which is not equal to input,
hence NO.
Recommended Practice

The idea is simple, we compute the sum of factorials of all digits and then compare the sum with n. 

Try It Yourself
redirect icon
C++
// C++ program to check if a number
// is a krishnamurthy number
#include <bits/stdc++.h>
using namespace std;

// Function to calculate the factorial of any number
int factorial(int n)
{
    int fact = 1;
    while (n != 0) {
        fact = fact * n;
        n--;
    }
    return fact;
}

// function to Check if number is krishnamurthy
bool isKrishnamurthy(int n)
{
    int sum = 0;

    int temp = n;
    while (temp != 0) {
        // calculate factorial of last digit
        // of temp and add it to sum
        sum += factorial(temp % 10);

        // replace value of temp by temp/10
        temp = temp / 10;
    }

    // Check if number is krishnamurthy
    return (sum == n);
}

// Driver code
int main()
{
    int n = 145;
    if (isKrishnamurthy(n))
        cout << "YES";
    else
        cout << "NO";
    return 0;
}
Java
// Java program to check if a number
// is a krishnamurthy number.
import java.util.*;
import java.io.*;

class Krishnamurthy {
    // function to calculate the factorial
    // of any number
    static int factorial(int n)
    {
        int fact = 1;
        while (n != 0) {
            fact = fact * n;
            n--;
        }
        return fact;
    }

    // function to Check if number is krishnamurthy
    static boolean isKrishnamurthy(int n)
    {
        int sum = 0;

        int temp = n;
        while (temp != 0) {
            // calculate factorial of last digit
            // of temp and add it to sum
            sum += factorial(temp % 10);

            // replace value of temp by temp/10
            temp = temp / 10;
        }

        // Check if number is krishnamurthy
        return (sum == n);
    }

    // Driver code
    public static void main(String[] args)
    {
        int n = 145;
        if (isKrishnamurthy(n))
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}
Python3
# Python program to check if a number
# is a krishnamurthy number

# function to calculate the factorial
# of any number
def factorial(n) :
    fact = 1
    while (n != 0) :
        fact = fact * n
        n = n - 1
    return fact

# function to Check if number is
# krishnamurthy/special
def isKrishnamurthy(n) :
    sum = 0
    temp = n
    while (temp != 0) :

        # calculate factorial of last digit
        # of temp and add it to sum
        rem = temp%10
        sum = sum + factorial(rem)

        # replace value of temp by temp / 10
        temp = temp // 10
        
    # Check if number is krishnamurthy
    return (sum == n)

# Driver code
n = 145
if (isKrishnamurthy(n)) :
    print("YES")
else :
    print("NO")


# This code is contributed by Prashant Aggarwal
C#
// C# program to check if a number
// is a krishnamurthy number.
using System;

class GFG {
    
    // function to calculate the
    // factorial of any number
    static int factorial(int n)
    {
        int fact = 1;
        
        while (n != 0) {
            fact = fact * n;
            n--;
        }
        
        return fact;
    }

    // function to Check if number is
    // krishnamurthy
    static bool isKrishnamurthy(int n)
    {
        int sum = 0;

        int temp = n;
        while (temp != 0) {
            
            // calculate factorial of
            // last digit of temp and
            // add it to sum
            sum += factorial(temp % 10);

            // replace value of temp
            // by temp/10
            temp = temp / 10;
        }

        // Check if number is
        // krishnamurthy
        return (sum == n);
    }

    // Driver code
    public static void Main()
    {
        int n = 145;
        if (isKrishnamurthy(n))
            Console.Write("YES");
        else
            Console.Write("NO");
    }
}

// This code is contributed by nitin mittal.
JavaScript
<script>
    
// Javascript program to check if a number
// is a krishnamurthy number

// Function to find Factorial 
// of any number
function factorial(n)
{
    let fact = 1;
    
    while (n != 0)
    {
        fact = fact * n;
        n--;
    }
    
    return fact;
}

// Function to check if number
// is krishnamurthy
function isKrishnamurthyNumber(n)
{
    let sum = 0;
    
    // Storing the value in
    // other variable
    let temp = n;
    
    while (temp != 0)
    {
        
        // Calculate factorial of last digit
        // of temp and add it to sum
        sum = sum + factorial(temp % 10);
        
        // Integer Division
        // replace value of temp by temp/10
        temp = parseInt(temp / 10);
    }
    
    // Check if number is krishnamurthy
    return sum == n;
}

// Driver code
let n = 145;

if (isKrishnamurthyNumber(n))
    document.write("YES");
else
    document.write("NO");

// This code is contributed by _saurabh_jaiswal

</script>
PHP
<?php
// PHP program to check if a number
// is a krishnamurthy number

// Function to find Factorial 
// of any number
function factorial($n)
{
    $fact = 1;
    while($n != 0)
    {
        $fact = $fact * $n;
        $n--;
    }
    
    return $fact;
}

// function to Check if number
// is krishnamurthy
function isKrishnamurthyNumber($n)
{
    $sum = 0;
    
    // Storing the value in
    // other variable
    $temp = $n;
    
    while($temp != 0)
    {
        // calculate factorial of last digit
        // of temp and add it to sum
        $sum = $sum + factorial($temp % 10);
        
        // Integer Division
        // replace value of temp by temp/10
        $temp = intdiv($temp, 10);
    }
    
    // Check if number is krishnamurthy
    return $sum == $n;
}

// Driver code
$n = 145;

if (isKrishnamurthyNumber($n))
    echo "YES";
else
    echo "NO";


// This code is contributed by akash7981
?>

Output
YES

Time Complexity: O(n log10n) where n is a given number
Auxiliary Space: O(1)
Interestingly, there are exactly four Krishnamurthy numbers i.e. 1, 2, 145, and 40585 known to us. 

Approach 2: Precomputing factorials and checking each digit of the number against the precomputed factorials.

  1.   The declaration int factorial[10]; creates an array factorial of 10 integers to store the precomputed factorials.
  2.   The precomputeFactorials() function calculates and stores the factorials of numbers 0 to 9 in the factorial array. It uses a for loop to iterate through each number and calculates its factorial by multiplying it with the factorial of the previous number.
  3.   The isKrishnamurthy(int n) function takes an integer n as input and checks if it is a Krishnamurthy number or not. It first declares a variable sum to store the sum of factorials of digits in n and a variable temp to store a copy of n.
  4.   It then enters a while loop that continues until temp becomes zero. In each iteration of the loop, it calculates the rightmost digit of temp using the modulo operator (temp % 10) and adds the factorial of that digit to sum. It then updates the value of temp by removing the rightmost digit using integer division (temp /= 10).
  5.   After the while loop completes, the function returns true if sum is equal to n, indicating that n is a Krishnamurthy number, or false otherwise.
  6.    In the main() function, we call precomputeFactorials() to precompute the factorials of numbers 0 to 9 and store them in the factorial array.
  7.    We then set n to 145, which is a Krishnamurthy number, and call isKrishnamurthy(n) to check if n is a Krishnamurthy number or not.
  8.    Finally, we use cout to print "YES" if isKrishnamurthy(n) returns true, indicating that n is a Krishnamurthy number, or "NO" otherwise. We also use endl to insert a newline character after the output.
C++
#include <iostream>
using namespace std;

int factorial[10];

void precomputeFactorials() {
    factorial[0] = 1;
    for (int i = 1; i < 10; i++) {
        factorial[i] = i * factorial[i-1];
    }
}

bool isKrishnamurthy(int n) {
    int sum = 0;
    int temp = n;
    while (temp > 0) {
        int digit = temp % 10;
        sum += factorial[digit];
        temp /= 10;
    }
    return (sum == n);
}

int main() {
    precomputeFactorials();
    int n = 145;
    if (isKrishnamurthy(n)) {
        cout <<"YES" << endl;
    } else {
        cout <<"NO" << endl;
    }
    return 0;
}
Java
// This is the Java code which checks if a given
// number is a Krishnamurthy number or not. 
//A Krishnamurthy number is a number whose sum of factorials
// of its digits is equal to the number itself

import java.util.Arrays;

public class KrishnamurthyNumber {

    // Declare an array to store factorials of digits 0-9
    static int[] factorial = new int[10];

    // Function to precompute the factorials and store them
    // in the array
    public static void precomputeFactorials()
    {
        factorial[0] = 1;
        for (int i = 1; i < 10; i++) {
            factorial[i] = i * factorial[i - 1];
        }
    }

    // Function to check if a given number is a
    // Krishnamurthy number or not
    public static boolean isKrishnamurthy(int n)
    {
        int sum = 0;
        int temp = n;
        // Compute the sum of factorials of digits of the
        // number
        while (temp > 0) {
            int digit = temp % 10;
            sum += factorial[digit];
            temp /= 10;
        }
        // Check if the sum of factorials is equal to the
        // input number
        return (sum == n);
    }

    public static void main(String[] args)
    {
        // Compute the factorials using
        // precomputeFactorials() function
        precomputeFactorials();
        int n = 145;
        // Check if 145 is a Krishnamurthy number using
        // isKrishnamurthy() function
        if (isKrishnamurthy(n)) {
            System.out.println("YES");
        }
        else {
            System.out.println("NO");
        }
    }
}
Python3
# Precompute factorials of digits 0-9
factorial = [1] * 10
def precompute_factorials():
    for i in range(1, 10):
        factorial[i] = i * factorial[i-1]

precompute_factorials()

# Check if a number is a Krishnamurthy number
def is_krishnamurthy(n):
    # Compute sum of factorials of digits
    sum = 0
    temp = n
    while temp > 0:
        digit = temp % 10
        sum += factorial[digit]
        temp //= 10

    # Check if sum equals the original number
    return (sum == n)

# Test if a given number is a Krishnamurthy number
n = 145
if is_krishnamurthy(n):
    print("YES")
else:
    print("NO")
C#
using System;

namespace KrishnamurthyNumber
{
    class Program
    {
        static int[] factorial = new int[10];

        static void precomputeFactorials()
        {
            factorial[0] = 1;
            for (int i = 1; i < 10; i++)
            {
                factorial[i] = i * factorial[i - 1];
            }
        }

        static bool isKrishnamurthy(int n)
        {
            int sum = 0;
            int temp = n;
            while (temp > 0)
            {
                int digit = temp % 10;
                sum += factorial[digit];
                temp /= 10;
            }
            return (sum == n);
        }

        static void Main(string[] args)
        {
            precomputeFactorials();
            int n = 145;
            if (isKrishnamurthy(n))
            {
                Console.WriteLine("YES");
            }
            else
            {
                Console.WriteLine("NO");
            }
        }
    }
}
JavaScript
let factorial = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880];

function precomputeFactorials() {
for (let i = 1; i < 10; i++) {
factorial[i] = i * factorial[i-1];
}
}

function isKrishnamurthy(n) {
let sum = 0;
let temp = n;
while (temp > 0) {
let digit = temp % 10;
sum += factorial[digit];
temp = Math.floor(temp / 10);
}
return (sum === n);
}

precomputeFactorials();
let n = 145;
if (isKrishnamurthy(n)) {
console.log("YES");
} else {
console.log("NO");
}

Output
YES

Time Complexity: O(logN)
Auxiliary Space: O(1)


Comment