我正在尝试查找此问题的输出,但是它不起作用,当n变为10 ^ 6时,这会花费很多时间 有什么方法可以更快地找到它?
找出n的阶乘零 哪里 1 <= n <= 10 ^ 6
这是我的代码:
'burja duba''i'
答案 0 :(得分:4)
找到
**<Ser:loginAS>**
的阶乘尾随零,其中n
结尾的零点受5的因数限制。1 <= n <= 10^6
的最大5
的倍数为n
(带整数除法),但这不是以n/5
的倍数计算重复因子。要获得这些值,请将25, 125, ....
除以5并进行递归调用。
source
以下是Java中的示例实现:
n
通过此实现,我们避免了实际乘数的计算,这是主要瓶颈。因此,这将在大约1.5秒内计算出int trailingZerosOfFactorial(int number){
if(number == 0){
return 0;
}
int nrIntegerDividedByFive = number/5;
return nrIntegerDividedByFive + trailingZerosOfFactorial(nrIntegerDividedByFive);
}
(导致n = 1_000_000
)。