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.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Count digits in a factorial | Set 1
- Smallest number with at least n digits in factorial
- Find the last two digits of Factorial of a given Number
- Find sum of digits in factorial of a number
- Number of digits in N factorial to the power N
- Count Divisors of Factorial
- Count of numbers upto N digits formed using digits 0 to K-1 without any adjacent 0s
- Count of numbers between range having only non-zero digits whose sum of digits is N and number is divisible by M
- Count factorial numbers in a given range
- Count numbers in given range such that sum of even digits is greater than sum of odd digits
- Count trailing zeroes in factorial of a number
- Golang Program to Count Trailing Zeros 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
- Count of unique digits in a given number N
- Count of Prime digits in a Number
- Count of numbers from range [L, R] that end with any of the given digits
- Count of integers of length N and value less than K such that they contain digits only from the given set