Check if a number is a Krishnamurthy Number or not

A Krishnamurthy number is a number whose sum of the factorial of digits is equal to the number itself. For example 145, sum of factorial of each digits:
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.

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



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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");
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
def isKrishnamurthy(n) :
    sum = 0
    temp = n
    while (temp != 0) :
  
        # calculate factorial of last digit
        # of temp and add it to sum
        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
n = 145
if (isKrishnamurthy(n)) :
    print "YES"
else :
    print "NO"
  
  
# This code is contributed by Nikita Tiwari

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right



Output:

YES

Interestingly, there are exactly four krishnamurthy numbers i.e. 1, 2, 145 and 40585 known to us.

This article is contributed by DANISH KALEEM. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : nitin mittal