➤ Even Number in Java
➤ Odd Number in Java
➤ Prime Number in Java
➤ Twin Prime Number
➤ Magic Number in Java
➤ Neon Number in Java
➤ Tech Number in Java
➤ Harshad Number
➤ Armstrong Number
➤ Palindrome Number
➤ Perfect Number in Java
➤ Pronic Number in Java
➤ Spy Number in Java
➤ Kaprekar Number
➤ Automorphic Number
➤ Krishnamurthy Number
➤ Sunny Number in Java
➤ Buzz Number in Java
➤ Evil Number in Java
➤ Duck Number in Java
➤ Nelson Number in Java
➤ Strong Number in Java
➤ Java Special Number
➤ Disarium Number
Java Number Program Using String
➤ Unique Number in Java
➤ Fascinating Number
➤ ISBN Number in Java
In this post, we will write a Java program to check whether the given number is Krishnamurthy Number or not? We will also develop a Java program to display all the Krishnamurthy numbers which exist in the given range/interval.
What is a Krishnamurthy Number?
If the sum of the factorial of all digits of a number is equal to the original number then the number is called Krishnamurthy Number. For example- 145 and 40585 are Krishnamurthy numbers. 1 and 2 are also Krishnamurthy numbers because their factorials are equal to the same number.
145
=> 1! + 4! + 5!
=> 1 + 24 + 120
=> 145
The sum of the factorial of individual digits is the same as the original number 145. Hence, 145 is a Krishnamurthy number.
Similarly,
40585
=> 4! + 0! + 5! + 8! + 5!
=> 24 +1 + 120 + 40320 + 120
=> 40585
1! = 1
So, 1 is a Krishnamurthy number.
Similarly,
2! = 1*2 = 2
2 is also a Krishnamurthy number.
Hence the numbers 1, 2, 145 and 40585 are Krishnamurthy number.

Note:- Sometimes the Krishnamurthy number is also called Strong number, Special number, and Peterson number.
Algorithm
- Using one temporary variable
temp
, store a copy of the original number. - Initialize the variable
sum
with zero. It will store the sum of the factorial of each individual digits. - Using loop until temp is not equal to zero,
3.a) Get the last digit of variabletemp
, and store it in the variablecurrentDigit
.
3.b) Calculate the factorial of variablecurrentDigit
.
3.c) Add the factorial result into the variablesum
.
3.d) Remove the last digit of the number. - Compare the original number with the value of the variable sum. If both are equal then the number is
Krishnamurthy Number
, else it is not.
Krishnamurthy Number program in Java
import java.util.Scanner;
public class KrishnamurthyNumber {
// method to Check the Krishnamurthy number
public static boolean isKrishnamurthy(int number){
// declare variables
int sum = 0, lastDigit = 0;
int tempNum = number;
// traverse through all digits of number
while(tempNum != 0) {
lastDigit = tempNum % 10;
sum += factorial(lastDigit);
tempNum /= 10;
}
// compare sum and number
if(sum == number)
return true;
return false;
}
// method to calculate factorial of an integer
public static long factorial(int n) {
long fact = 1;
for(int i=1; i<=n; i++) {
fact *= i;
}
return fact;
}
// main method
public static void main(String[] args) {
// declare variables
int number = 0;
boolean result = false;
//create Scanner class object to take input
Scanner scan = new Scanner(System.in);
// take input from end-user
System.out.print("Enter an integer number::");
number = scan.nextInt();
// check number is Krishnamurthy number
result = isKrishnamurthy(number);
if(result)
System.out.println(number +
" is a Krishnamurthy number.");
else
System.out.println(number +
" is not a Krishnamurthy number.");
// close Scanner class object
scan.close();
}
}
The output for the different test cases are:-
Enter an integer number:: 146
146 is not a Krishnamurthy number.
Enter an integer number:: 145
145 is a Krishnamurthy number.
Also see:- Special number, Magic number, Armstrong number, Perfect number, Evil Number, Spy Number, Sunny number in Java
Optimization
We can analyze that the last digit will be always from 0 to 9, and every time we need to find the factorial from 0 to 9 only. So, it is a better idea to calculate the factorial value from 0 to 9 and store it in an array. For the large numbers, It will be an optimized solution for checking the number is a Krishnamurthy number or not. Conclusion:- before checking the number is a Krishnamurthy number or not, calculate factorial from 0 to 9 and store it in an array.
The static block executes before executing the main method so, the factorial values from 0 to 9 should be calculated and stored in the array fact[]
.
In the below Java program, we used this optimized solution to check the number is a Krishnamurthy number or not.
import java.util.Scanner;
public class KrishnamurthyNumber{
// Array to store factorial value
// from 0 to 9
static int fact[] = new int[10];
// static block to calculate factorial
static {
fact[0] = fact[1] = 1;
for(int i=2; i<fact.length; ++i)
fact[i] = fact[i-1] * i;
}
// method to Check Krishnamurthy number
public static boolean isKrishnamurthy(int number) {
// declare variables
int sum = 0, lastDigit = 0;
int tempNum = number;
// traverse through all digits of number
while(tempNum != 0) {
lastDigit = tempNum % 10;
sum += fact[lastDigit];
tempNum /= 10;
}
// compare sum and number
return (sum == number);
}
// main method
public static void main(String[] args) {
// declare variables
int number = 0;
boolean result = false;
//create Scanner class object to take input
Scanner scan = new Scanner(System.in);
// take input from end-user
System.out.print("Enter an integer number:: ");
number = scan.nextInt();
// check number is Krishnamurthy number?
result = isKrishnamurthy(number);
if(result)
System.out.println(number +
" is a Krishnamurthy number.");
else
System.out.println(number +
" is not a Krishnamurthy number.");
// close Scanner class object
scan.close();
}
}
Java program to find all the Krishnamurthy number in a Range
import java.util.Scanner;
public class KrishnamurthyNumberOptimized {
// Array to store factorial value
// from 0 to 9
static int fact[] = new int[10];
// static block to calculate factorial
static {
fact[0] = fact[1] = 1;
for(int i=2; i<fact.length; ++i)
fact[i] = fact[i-1] * i;
}
// method to Check Krishnamurthy number
public static boolean isKrishnamurthy(int number) {
// declare variables
int sum = 0, lastDigit = 0;
int tempNum = number;
// traverse through all digits of number
while(tempNum != 0) {
lastDigit = tempNum % 10;
sum += fact[lastDigit];
tempNum /= 10;
}
// compare sum and number
return (sum == number);
}
// main method
public static void main(String[] args) {
// declare variables
int minRange = 0, maxRange = 0;
//create Scanner class object to take input
Scanner scan = new Scanner(System.in);
System.out.print("Enter the min value of range:");
minRange = scan.nextInt();
System.out.print("Enter the max value of range:");
maxRange = scan.nextInt();
// loop
System.out.println("The Krishnamurthy number from "+
minRange + " to "+ maxRange+" are: ");
for(int i=minRange; i<=maxRange; i++) {
// check number
if(isKrishnamurthy(i))
System.out.print(i +" ");
}
// close Scanner class object
scan.close();
}
}
Output:-
Enter the min value of range:1
Enter the max value of range:1000000
The Krishnamurthy number from 1 to 1000000 are:1 2 145 40585
If you enjoyed this post, share it with your friends. Do you want to share more information about the topic discussed above or do you find anything incorrect? Let us know in the comments. Thank you!