给定正整数n、a,求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除
时间: 2024-03-06 11:51:23 浏览: 111
求3个整数中的最大值
可以使用与上面类似的方法,具体实现如下:
```python
import math
def max_k(n, a):
# 分解质因数
factors = {}
for i in range(2, int(math.sqrt(a))+1):
while a % i == 0:
factors[i] = factors.get(i, 0) + 1
a //= i
if a > 1: # 处理剩余的质因子
factors[a] = factors.get(a, 0) + 1
# 计算贡献
res = float('inf')
for p, x in factors.items():
y = 0
t = p
while t <= n:
y += n // t
t *= p
res = min(res, y // x)
return res
n = 10
a = 36
print(max_k(n, a)) # 输出 2
```
这里的实现与上面的实现类似,不同之处在于计算贡献的方式。我们仍然使用了一个字典 `factors` 来存储质因数及其指数,然后循环计算每个质因子的贡献。在计算贡献的过程中,我们使用了一个循环,计算 n! 中质因子 p 的指数 y。具体地,我们从 p 开始,每次乘以 p,直到 p 的某个幂大于 n,然后统计 p 的各个幂次对 n! 的贡献,即 y = ⌊n/p⌋ + ⌊n/p^2⌋ + ⌊n/p^3⌋ + ...。最后,我们取所有质因子的贡献的最小值即可得到最终的答案。
注意,在计算贡献时,我们使用了整除符号 `//` 来确保结果是整数。
阅读全文