Open In App

Find N from the value of N!

Last Updated : 20 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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:
Explanation: 
5! = 1 * 2 * 3 * 4 * 5 = 120
Input: K = 6 
Output:
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++




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




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




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




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


Javascript




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


Output: 

5
3

 

Time Complexity: O(1)
Auxiliary Space: O(1)

As constant extra space is used.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads