如何找到一个很大的阶乘

时间:2018-09-24 13:28:55

标签: java time-complexity biginteger factorial

我正在尝试查找此问题的输出,但是它不起作用,当n变为10 ^ 6时,这会花费很多时间 有什么方法可以更快地找到它?

找出n的阶乘零 哪里 1 <= n <= 10 ^ 6

这是我的代码:

'burja duba''i'

1 个答案:

答案 0 :(得分:4)

  

找到**<Ser:loginAS>**的阶乘尾随零,其中n

结尾的零点受5的因数限制。1 <= n <= 10^6的最大5的倍数为n(带整数除法),但这不是以n/5的倍数计算重复因子。要获得这些值,请将25, 125, ....除以5并进行递归调用。 source

以下是Java中的示例实现:

n

Try it online.

通过此实现,我们避免了实际乘数的计算,这是主要瓶颈。因此,这将在大约1.5秒内计算出int trailingZerosOfFactorial(int number){ if(number == 0){ return 0; } int nrIntegerDividedByFive = number/5; return nrIntegerDividedByFive + trailingZerosOfFactorial(nrIntegerDividedByFive); } (导致n = 1_000_000)。