Check if a given number is factorial of other
The given problem is to check if a given number is the factorial of another number. In mathematics, the factorial of a non-negative integer 'n' is denoted by 'n!' and is the product of all positive integers less than or equal to 'n'. For example, 5! = 5 × 4 × 3 × 2 × 1 = 120.
The task is to determine whether the given number 'num' is equal to the factorial of any positive integer 'i' or not. If there exists an 'i' such that 'num' is equal to 'i!', then the program should output 'num is factorial of i'. Otherwise, it should print 'num is not factorial of any number'.
Explanation with Suitable Example
Let's take a few examples to understand the problem better. We'll use these examples to validate the given code's output as well.
-
Example: num = 24
- 24 is not a factorial of 1 because 1! = 1, and 24 ≠ 1.
- 24 is not a factorial of 2 because 2! = 2, and 24 ≠ 2.
- 24 is not a factorial of 3 because 3! = 6, and 24 ≠ 6.
- 24 is a factorial of 4 because 4! = 24, and 24 = 24.
-
Example: num = 34
- 34 is not a factorial of any number because no positive integer 'i' exists such that i! = 34.
Pseudocode
FUNCTION is_factorial_of(num)
result = 0
IF num = 1 OR num = 0 THEN
result = 1
ELSE IF num > 1 THEN
temp = num
i = 1
WHILE temp % i = 0 DO
temp = temp / i
i = i + 1
ENDWHILE
IF temp = 1 THEN
result = i - 1
ENDIF
ENDIF
IF result != 0 THEN
PRINT num, "is factorial of", result
ELSE
PRINT num, "is not factorial of any number"
ENDIF
END FUNCTION
Algorithm Explanation
- Start the function
is_factorial_of(num)
with the given 'num' as the parameter. - Initialize 'result' to 0 to store the possible factorial number 'i'.
- Check if 'num' is 1 or 0. If so, set 'result' to 1 since both 0! and 1! equal 1.
- If 'num' is greater than 1, enter the loop.
- Initialize 'temp' with 'num', and 'i' with 1. The loop is meant to find the value of 'i' for which 'num' is a factorial.
- In the loop, keep dividing 'temp' by 'i' until 'temp' is not divisible by 'i'.
- If, after the loop, 'temp' becomes 1, it means 'num' is factorial of (i-1). Set 'result' to (i-1).
- If 'result' is non-zero, it means 'num' is factorial of some number 'i', and print the result accordingly.
- If 'result' is still zero, 'num' is not a factorial of any number, and print the result accordingly.
Code Solution
Here given code implementation process.
// C program
// Check if a given number is factorial of other
#include <stdio.h>
//Check whether given number is factorial of any number
void is_factorial_of(int num)
{
int result = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
int temp = num;
int i = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = temp / i;
// Get next number
i++;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
printf("\n [%d] is factorial of %d", num, result);
}
else
{
printf("\n [%d] is not factorial of any number", num);
}
}
int main()
{
is_factorial_of(24);
is_factorial_of(2);
is_factorial_of(34);
is_factorial_of(720);
is_factorial_of(120);
is_factorial_of(0);
return 0;
}
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
// Java program
// Check if a given number is factorial of other
class FactorialNo
{
//Check whether given number is factorial of any number
public void is_factorial_of(int num)
{
int result = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
int temp = num;
int i = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = temp / i;
// Get next number
i++;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
System.out.print("\n [" + num + "] is factorial of " + result);
}
else
{
System.out.print("\n [" + num + "] is not factorial of any number");
}
}
public static void main(String[] args)
{
FactorialNo obj = new FactorialNo();
// Test Case
obj.is_factorial_of(24);
obj.is_factorial_of(2);
obj.is_factorial_of(34);
obj.is_factorial_of(720);
obj.is_factorial_of(120);
obj.is_factorial_of(0);
}
}
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
//Include header file
#include <iostream>
using namespace std;
// C++ program
// Check if a given number is factorial of other
class FactorialNo
{
public:
//Check whether given number is factorial of any number
void is_factorial_of(int num)
{
int result = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
int temp = num;
int i = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = temp / i;
// Get next number
i++;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
cout << "\n [" << num << "] is factorial of " << result;
}
else
{
cout << "\n [" << num << "] is not factorial of any number";
}
}
};
int main()
{
FactorialNo obj = FactorialNo();
// Test Case
obj.is_factorial_of(24);
obj.is_factorial_of(2);
obj.is_factorial_of(34);
obj.is_factorial_of(720);
obj.is_factorial_of(120);
obj.is_factorial_of(0);
return 0;
}
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
//Include namespace system
using System;
// C# program
// Check if a given number is factorial of other
class FactorialNo
{
//Check whether given number is factorial of any number
public void is_factorial_of(int num)
{
int result = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
int temp = num;
int i = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = temp / i;
// Get next number
i++;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
Console.Write("\n [" + num + "] is factorial of " + result);
}
else
{
Console.Write("\n [" + num + "] is not factorial of any number");
}
}
public static void Main(String[] args)
{
FactorialNo obj = new FactorialNo();
// Test Case
obj.is_factorial_of(24);
obj.is_factorial_of(2);
obj.is_factorial_of(34);
obj.is_factorial_of(720);
obj.is_factorial_of(120);
obj.is_factorial_of(0);
}
}
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
<?php
// Php program
// Check if a given number is factorial of other
class FactorialNo
{
//Check whether given number is factorial of any number
public function is_factorial_of($num)
{
$result = 0;
if ($num == 1 || $num == 0)
{
$result = 1;
}
else if ($num > 1)
{
//Define loop controlling variable
$temp = $num;
$i = 1;
// Execute loop, until number is divisible by [i]
while ($temp % $i == 0)
{
$temp = intval($temp / $i);
// Get next number
$i++;
}
if ($temp == 1)
{
//When remainder of (i-1) is one
$result = $i - 1;
}
}
if ($result != 0)
{
echo "\n [". $num ."] is factorial of ". $result;
}
else
{
echo "\n [". $num ."] is not factorial of any number";
}
}
}
function main()
{
$obj = new FactorialNo();
// Test Case
$obj->is_factorial_of(24);
$obj->is_factorial_of(2);
$obj->is_factorial_of(34);
$obj->is_factorial_of(720);
$obj->is_factorial_of(120);
$obj->is_factorial_of(0);
}
main();
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
// Node Js program
// Check if a given number is factorial of other
class FactorialNo
{
//Check whether given number is factorial of any number
is_factorial_of(num)
{
var result = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
var temp = num;
var i = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = parseInt(temp / i);
// Get next number
i++;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
process.stdout.write("\n [" + num + "] is factorial of " + result);
}
else
{
process.stdout.write("\n [" + num + "] is not factorial of any number");
}
}
}
function main()
{
var obj = new FactorialNo();
// Test Case
obj.is_factorial_of(24);
obj.is_factorial_of(2);
obj.is_factorial_of(34);
obj.is_factorial_of(720);
obj.is_factorial_of(120);
obj.is_factorial_of(0);
}
main();
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
# Python 3 program
# Check if a given number is factorial of other
class FactorialNo :
# Check whether given number is factorial of any number
def is_factorial_of(self, num) :
result = 0
if (num == 1 or num == 0) :
result = 1
elif(num > 1) :
# Define loop controlling variable
temp = num
i = 1
# Execute loop, until number is divisible by [i]
while (temp % i == 0) :
temp = int(temp / i)
# Get next number
i += 1
if (temp == 1) :
# When remainder of (i-1) is one
result = i - 1
if (result != 0) :
print("\n [", num ,"] is factorial of ", result, end = "")
else :
print("\n [", num ,"] is not factorial of any number", end = "")
def main() :
obj = FactorialNo()
# Test Case
obj.is_factorial_of(24)
obj.is_factorial_of(2)
obj.is_factorial_of(34)
obj.is_factorial_of(720)
obj.is_factorial_of(120)
obj.is_factorial_of(0)
if __name__ == "__main__": main()
Output
[ 24 ] is factorial of 4
[ 2 ] is factorial of 2
[ 34 ] is not factorial of any number
[ 720 ] is factorial of 6
[ 120 ] is factorial of 5
[ 0 ] is factorial of 1
# Ruby program
# Check if a given number is factorial of other
class FactorialNo
# Check whether given number is factorial of any number
def is_factorial_of(num)
result = 0
if (num == 1 || num == 0)
result = 1
elsif(num > 1)
# Define loop controlling variable
temp = num
i = 1
# Execute loop, until number is divisible by [i]
while (temp % i == 0)
temp = temp / i
# Get next number
i += 1
end
if (temp == 1)
# When remainder of (i-1) is one
result = i - 1
end
end
if (result != 0)
print("\n [", num ,"] is factorial of ", result)
else
print("\n [", num ,"] is not factorial of any number")
end
end
end
def main()
obj = FactorialNo.new()
# Test Case
obj.is_factorial_of(24)
obj.is_factorial_of(2)
obj.is_factorial_of(34)
obj.is_factorial_of(720)
obj.is_factorial_of(120)
obj.is_factorial_of(0)
end
main()
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
// Scala program
// Check if a given number is factorial of other
class FactorialNo
{
//Check whether given number is factorial of any number
def is_factorial_of(num: Int): Unit = {
var result: Int = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
var temp: Int = num;
var i: Int = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = (temp / i).toInt;
// Get next number
i += 1;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
print("\n [" + num + "] is factorial of " + result);
}
else
{
print("\n [" + num + "] is not factorial of any number");
}
}
}
object Main
{
def main(args: Array[String]): Unit = {
var obj: FactorialNo = new FactorialNo();
// Test Case
obj.is_factorial_of(24);
obj.is_factorial_of(2);
obj.is_factorial_of(34);
obj.is_factorial_of(720);
obj.is_factorial_of(120);
obj.is_factorial_of(0);
}
}
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
// Swift 4 program
// Check if a given number is factorial of other
class FactorialNo
{
//Check whether given number is factorial of any number
func is_factorial_of(_ num: Int)
{
var result: Int = 0;
if (num == 1 || num == 0)
{
result = 1;
}
else if (num > 1)
{
//Define loop controlling variable
var temp: Int = num;
var i: Int = 1;
// Execute loop, until number is divisible by [i]
while (temp % i == 0)
{
temp = temp / i;
// Get next number
i += 1;
}
if (temp == 1)
{
//When remainder of (i-1) is one
result = i - 1;
}
}
if (result != 0)
{
print("\n [\(num)] is factorial of ", result, terminator: "");
}
else
{
print("\n [\(num)] is not factorial of any number", terminator: "");
}
}
}
func main()
{
let obj: FactorialNo = FactorialNo();
// Test Case
obj.is_factorial_of(24);
obj.is_factorial_of(2);
obj.is_factorial_of(34);
obj.is_factorial_of(720);
obj.is_factorial_of(120);
obj.is_factorial_of(0);
}
main();
Output
[24] is factorial of 4
[2] is factorial of 2
[34] is not factorial of any number
[720] is factorial of 6
[120] is factorial of 5
[0] is factorial of 1
Resultant Output Explanation
The given code is designed to check if the input numbers are factorial of any positive integer 'i' or not. Let's analyze the output for the given input numbers:
- 24: The code correctly identifies that 24 is the factorial of 4, as 4! = 24.
- 2: The code correctly identifies that 2 is the factorial of 2, as 2! = 2.
- 34: The code correctly identifies that 34 is not the factorial of any positive integer.
- 720: The code correctly identifies that 720 is the factorial of 6, as 6! = 720.
- 120: The code correctly identifies that 120 is the factorial of 5, as 5! = 120.
- 0: The code correctly identifies that 0 is the factorial of 1, as 0! = 1.
Time Complexity of the Code
The time complexity of the code is mainly determined by the while loop. In the worst case scenario, the loop will run until 'temp' becomes 1. The value of 'temp' will decrease by a factor of 'i' in each iteration. Hence, the number of iterations will be approximately log(num) to the base 'i'. So, the overall time complexity can be approximated as O(log(num)).
It is important to note that the code could be further optimized, as it currently checks for factorials up to 'num' itself. However, since the factorial of any number 'n' is already a very large number, it is highly unlikely to have a factorial of a number greater than 'num'. Therefore, the given code still provides a correct solution to the problem.
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment