Given an integer n (can be very large), find the number of digits that appear in its factorial, where factorial is defined as, factorial(n) = 1*2*3*4……..*n and factorial(0) = 1
Input : n = 1 Output : 1 1! = 1, hence number of digits is 1 Input : 5 Output : 3 5! = 120, i.e., 3 digits Input : 10 Output : 7 10! = 3628800, i.e., 7 digits Input : 50000000 Output : 363233781 Input : 1000000000 Output : 8565705523
We’ve already discussed the solution for small values of n in the Count digits in a factorial | Set 1. However that solution would not be able to handle cases where n >10^6
So, can we improve our solution ?
Yes ! we can.
We can use Kamenetsky’s formula to find our answer !
It approximates the number of digits in a factorial by : f(x) = log10( ((n/e)^n) * sqrt(2*pi*n)) Thus, we can pretty easily use the property of logarithms to, f(x) = n* log10(( n/ e)) + log10(2*pi*n)/2
And that’s it !
Our solution can handle very large inputs that can be accommodated in a 32 bit integer,
and even beyond that ! .
Below is the implementation of above idea :
1 363233781 8565705523 199
References : oeis.org
This article is contributed by Ashutosh Kumar .If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
- Count digits in a factorial | Set 1
- Find sum of digits in factorial of a number
- Number of digits in N factorial to the power N
- Smallest number with at least n digits in factorial
- Count of numbers between range having only non-zero digits whose sum of digits is N and number is divisible by M
- Count Divisors of Factorial
- Count numbers in given range such that sum of even digits is greater than sum of odd digits
- Count factorial numbers in a given range
- Count trailing zeroes in factorial of a number
- Find the last digit when factorial of A divides factorial of B
- Count of integers in a range which have even number of odd digits and odd number of even digits
- Count even and odd digits in an Integer
- Count numbers with same first and last digits
- Given count of digits 1, 2, 3, 4, find the maximum sum possible
- Count of numbers from range [L, R] that end with any of the given digits