Find N from the value of N!
Last Updated :
20 Dec, 2022
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++
#include "bits/stdc++.h"
#define ll long long int
using namespace std;
map<ll, ll> m;
int precompute()
{
ll fact = 1;
for (ll i = 1; i <= 18; i++) {
fact = fact * i;
m[fact] = i;
}
}
int main()
{
precompute();
int K = 120;
cout << m[K] << endl;
K = 6;
cout << m[K] << endl;
return 0;
}
|
Java
import java.util.*;
class GFG{
static Map<Integer, Integer> m = new HashMap<Integer, Integer>();
static void precompute()
{
int fact = 1 ;
for ( int i = 1 ; i <= 18 ; i++) {
fact = fact * i;
m.put(fact, i);
}
}
public static void main(String[] args)
{
precompute();
int K = 120 ;
System.out.print(m.get(K) + "\n" );
K = 6 ;
System.out.print(m.get(K) + "\n" );
}
}
|
Python3
m = {};
def precompute() :
fact = 1 ;
for i in range ( 1 , 19 ) :
fact = fact * i;
m[fact] = i;
if __name__ = = "__main__" :
precompute();
K = 120 ;
print (m[K]);
K = 6 ;
print (m[K]) ;
|
C#
using System;
using System.Collections.Generic;
class GFG{
static Dictionary< int , int > m = new Dictionary< int , int >();
static void precompute()
{
int fact = 1;
for ( int i = 1; i <= 18; i++) {
fact = fact * i;
m.Add(fact, i);
}
}
public static void Main(String[] args)
{
precompute();
int K = 120;
Console.Write(m[K] + "\n" );
K = 6;
Console.Write(m[K] + "\n" );
}
}
|
Javascript
<script>
var m = {};
function precompute()
{
var fact = 1;
for ( var i = 1; i <= 18; i++) {
fact = fact * i;
m[fact] = i;
}
}
precompute();
var K = 120;
document.write(m[K] + "<br>" );
K = 6;
document.write(m[K]);
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
As constant extra space is used.
Share your thoughts in the comments
Please Login to comment...