一个人能知道一个阶乘会多大计算之前?
-
12-09-2019 - |
题
我使用GMP计算非常大的阶乘(例如234234!)。有没有知道的任何方式,一个不计算之前,有多少位数字的结果将(或可能)是什么?
解决方案
的的对数的阶乘强>可以被用来计算数字,该数阶乘将采取数:
此可以很容易地转换为一个算法形式:
//Pseudo-code
function factorialDigits (n)
var result = 0;
for(i = 1; i<=n; i++)
result += log10(n);
return result;
其他提示
您可以将斯特灵公式公式用简单的数学对数,让你数的位数:
n! ~ sqr(2*pi*n) * (n/e)^n
log10(n!) ~ log10(2*pi*n)/2 + n*log10(n/e)
硬件浮动的数学是足够的,这使得它闪电快。
这将是
nlog(n) - n + log(n(1 + 4n(1 + 2n)))/6 + log(pi)/2
见主题@ http://en.wikipedia.org/wiki/Factorial “增长率” 斯里尼瓦沙的Ramanujan方法
是,请参阅斯特林近似
报告说,N! 〜= SQRT(2 * PI n)的(N / E)^ N。要获得的位数,取1点+的log(n!)/日志(10)。
好约四人提到斯特林所以...另一个选项是一个LUT存储的位数为每个第一N阶乘。假设4个字节用于整数和4个字节用于数字的位数,则可以在第一百万阶乘存储在周围8MB。
不隶属于 StackOverflow