在本文中,作者讨论了一种使用定点大数库快速准确地计算大数阶乘的方法。关于实现的一个反复出现的问题是从乘积 T1 = T2 * N! 中提取 T2 项,其中 T1 和 N!是已知的。为了找到 T2 项,作者对素数指数进行了分析,并提出了一个计算公式:
T2(4N) = multiplication(i=all primes<=4N) of [i^sum(j=1,2,3,4,5,...4N/(i^j)) of [(4N/(i^j))%2]]
T2 的子项在 T2(N) 项中对于素数 i 具有指数 e,可表示为计算如下:
for (e=0,j=N4;j;e+=j&1,j/=p);
其中 e 是指数,p 是质数,N4 是4*N
计算出的 T2 项随后用于优化阶乘的计算,所得算法的计算复杂度接近 O(log(n))。
为前 128 个阶乘提供了粗略时间测量。作者承认此实现无法进一步简化,并且已经高度优化。
以上是我们如何有效地从 T1 = T2 * N 中提取 T2 项!使用素指数分析?的详细内容。更多信息请关注PHP中文网其他相关文章!