Description
Input
Output
Sample Input
2
10
20
Sample Output
7
19
Source
题目的简单的意思就是给你一个数字,让你求出他的阶乘后的数字是多少位的
这个其实有一个简便的算法就是
例如 1000!
lg(1) + lg(2) ...+lg(1000)
取整后在加1
便是1000!的位数。
但是我做的那个题很苛刻,这样的算法是过不去的,他说是超时,所以就要提高算法的运行效率。
n! = sqrt(2*π*n) * ((n/e)^n) * (1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3))
π = acos(-1)
e = exp(1)
两边对10取对数
忽略log10(1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3)) ≈ log10(1) = 0
得到公式
log10(n!) = log10(sqrt(2 * pi * n)) + n * log10(n / e)
其实这个式子我也看不太懂,只能记下来了。。。。
题目网址 http://poj.org/problem?id=1423
这个题卡的好严。。。。