172. 阶乘后的零
分析
尾随零的产生是因为 10 = 2 * 5,每次有一个因数 2 和 5 的乘积,都会形成一个 10,从而在阶乘结果的末尾增加一个零
由于阶乘的数值中,因数 2 的出现频率远高于因数 5,所以我们只需要考虑 5 出现的次数,计算 n! 中 5 的因数的个数,即可得到尾随零的个数
- 计算
n!中因数5的个数 - 对于
n中所有能被 5 整除的数,每个数都至少包含一个5,例如:5, 10, 15, 20... - 如果一个数能被
25整除,则它会包含额外的一个因数5,比如25会有两个因数5,50也会有两个因数5,依此类推 - 因此,
n!中尾随零的数量就是n / 5 + n / 25 + n / 125 + ...,直到5^k > n
时间复杂度
时间复杂度:O(log_5 n) ,因为每次将 n 除以 5,直到 n 小于 5 为止
空间复杂度
空间复杂度为 O(1)
C++代码
|
|