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 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.
The idea is simple, we compute the sum of factorials of all digits and then compare the sum with n.
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. |
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 ?> |
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> |
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.
- The declaration int factorial[10]; creates an array factorial of 10 integers to store the precomputed factorials.
- 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.
- 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.
- 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).
- 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.
- In the main() function, we call precomputeFactorials() to precompute the factorials of numbers 0 to 9 and store them in the factorial array.
- 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.
- 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; } |
Time Complexity: O(logN)
Auxiliary Space: O(1)
This article is contributed by DANISH KALEEM. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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
Please Login to comment...