Given a number K which represents the factorial of a number N, the task is to find the value of N.
Note: K < 1018
Examples:
Input: K = 120
Output: 5
Explanation:
5! = 1 * 2 * 3 * 4 * 5 = 120
Input: K = 6
Output: 3
Explanation:
3! = 1 * 2 * 3 = 6
Approach: It is given that the value of N! is less than 1018. On observation, we can see that this is true only for N <= 18. Therefore we can precompute values of factorials from 1 to 18 and store it in a Hash Table or Map. After pre-computation, for every value of N!, the corresponding N is returned in constant time.
Below is the implementation of the above approach:
// C++ program to find a number such that // the factorial of that number is given #include "bits/stdc++.h" #define ll long long int using namespace std;
// Map to precompute and store the // factorials of the numbers map<ll, ll> m; // Function to precompute factorial int precompute()
{ ll fact = 1;
for (ll i = 1; i <= 18; i++) {
// Calculating the factorial for
// each i and storing in a map
fact = fact * i;
m[fact] = i;
}
} // Driver code int main()
{ // Precomputing the factorials
precompute();
int K = 120;
cout << m[K] << endl;
K = 6;
cout << m[K] << endl;
return 0;
} |
// Java program to find a number such that // the factorial of that number is given import java.util.*;
class GFG{
// Map to precompute and store the // factorials of the numbers static Map<Integer, Integer> m = new HashMap<Integer, Integer>();
// Function to precompute factorial static void precompute()
{ int fact = 1 ;
for ( int i = 1 ; i <= 18 ; i++) {
// Calculating the factorial for
// each i and storing in a map
fact = fact * i;
m.put(fact, i);
}
} // Driver code public static void main(String[] args)
{ // Precomputing the factorials
precompute();
int K = 120 ;
System.out.print(m.get(K) + "\n" );
K = 6 ;
System.out.print(m.get(K) + "\n" );
} } // This code is contributed by 29AjayKumar |
# Python3 program to find a number such that # the factorial of that number is given # Map to precompute and store the # factorials of the numbers m = {};
# Function to precompute factorial def precompute() :
fact = 1 ;
for i in range ( 1 , 19 ) :
# Calculating the factorial for
# each i and storing in a map
fact = fact * i;
m[fact] = i;
# Driver code if __name__ = = "__main__" :
# Precomputing the factorials
precompute();
K = 120 ;
print (m[K]);
K = 6 ;
print (m[K]) ;
# This code is contributed by AnkitRai01 |
// C# program to find a number such that // the factorial of that number is given using System;
using System.Collections.Generic;
class GFG{
// Map to precompute and store the // factorials of the numbers static Dictionary< int , int > m = new Dictionary< int , int >();
// Function to precompute factorial static void precompute()
{ int fact = 1;
for ( int i = 1; i <= 18; i++) {
// Calculating the factorial for
// each i and storing in a map
fact = fact * i;
m.Add(fact, i);
}
} // Driver code public static void Main(String[] args)
{ // Precomputing the factorials
precompute();
int K = 120;
Console.Write(m[K] + "\n" );
K = 6;
Console.Write(m[K] + "\n" );
} } // This code is contributed by 29AjayKumar |
<script> // Javascript implementation of the // above approach // Map to precompute and store the // factorials of the numbers var m = {};
// Function to precompute factorial function precompute()
{ var fact = 1;
for ( var i = 1; i <= 18; i++) {
// Calculating the factorial for
// each i and storing in a map
fact = fact * i;
m[fact] = i;
}
} // Driver code precompute(); var K = 120;
document.write(m[K] + "<br>" );
K = 6; document.write(m[K]); // This code is contributed by Shivanisingh </script> |
5 3
Time Complexity: O(1)
Auxiliary Space: O(1)
As constant extra space is used.