折半查找求阶乘函数后K个零
时间: 2023-06-14 19:07:01 浏览: 106
阶乘后的零.md
折半查找求阶乘函数后K个零的方法如下:
1. 定义一个函数 `count_zeros(n)`,表示求n的阶乘末尾有多少个0。
2. 使用二分法,查找一个最小的正整数x,使得 `count_zeros(x) >= k`。
3. 返回x。
具体实现如下:
```python
def count_zeros(n):
count = 0
while n > 0:
n //= 5
count += n
return count
def find_k_zeros(k):
left, right = 1, 5*k
while left < right:
mid = (left + right) // 2
if count_zeros(mid) >= k:
right = mid
else:
left = mid + 1
return left
```
首先定义了一个 `count_zeros` 函数,用于计算n的阶乘末尾有多少个0。这里使用了一个小技巧,就是每次将n除以5,来计算n中因子5的个数。因为阶乘中因子2的个数远多于因子5的个数,所以只需要计算因子5的个数即可。
然后使用二分法,在区间 [1, 5*k] 中查找一个最小的x,使得 `count_zeros(x) >= k`。如果 `count_zeros(x) >= k`,说明x的阶乘末尾至少有k个0,因此需要继续在左半区间查找。如果 `count_zeros(x) < k`,说明x的阶乘末尾不足k个0,因此需要继续在右半区间查找。
最终返回left即可。
阅读全文