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 email@example.com. 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
- Smallest number with at least n digits in factorial
- Number of digits in N factorial to the power N
- Find sum of digits in factorial of a number
- 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 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 numbers with same first and last digits
- Count even and odd digits in an Integer
- Count of numbers from range [L, R] whose sum of digits is Y
- Given count of digits 1, 2, 3, 4, find the maximum sum possible
- Count digits in given number N which divide N
- Count total number of digits from 1 to n