编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现
要计算 \( n! \) 在 \( P \) 进制下末尾零的个数,等价于计算 \( n! \) 能被 \( P \) 的多少次幂整除。 设 \( P \) 的质因数分解为: \[ P = p_1^{k_1} \cdot p_2^{k_2} \cdots p_m^{k_m} \] 则 \( n! \) 在 \( P \) 进制下末尾零的个数为: \[ \min_{i=1}^m \left\lfloor \frac{\text{n! 中质因子 } p_i \text{ 的个数}}{k_i} \right\rfloor \] 步骤: 1. 对 \( P \) 进行质因数分解,得到每个质因数 \( p_i \) 及其指数 \( k_i \)。 2. 对每个 \( p_i \),计算 \( n! \) 中 \( p_i \) 的个数(用勒让德公式): \[ \text{cnt}_i = \sum_{t=1}^{\infty} \left\lfloor \frac{n}{p_i^t} \right\rfloor \] 3. 计算 \( \lfloor \text{cnt}_i / k_i \rfloor \),取最小值。 注意: - 当 \( P \) 是质数时,只需计算 \( n! \) 中 \( P \) 的个数。 - 当 \( P \) 较大时,质因数分解到 \( \sqrt{P} \) 即可。 代码实现: ```python def count_factors_in_factorial(n, p): count = 0 while n: n //= p count += n return count def prime_factorization(x): factors = {} i = 2 while i * i <= x: while x % i == 0: factors[i] = factors.get(i, 0) + 1 x //= i i += 1 if x > 1: factors[x] = factors.get(x, 0) + 1 return factors def main(): n, p = map(int, input().split()) factors = prime_factorization(p) ans = float('inf') for prime, exp in factors.items(): cnt = count_factors_in_factorial(n, prime) ans = min(ans, cnt // exp) print(ans) if __name__ == "__main__": main() ``` ######[AI问答 | 549点数解答 | 2026-01-11 17:49:54]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)322
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)292
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)342
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)541
- Python代码实现:绘制洁白无瑕水晶玫瑰,附示例代码与注意事项(字节豆包 | 447点数解答 | 2025-11-02 14:37:54)62
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)284
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)307
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)314
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)389
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)242
- Java 实现继承关系:Fu 类、Zi 类与测试类 Example04 代码解析及注意要点(字节豆包 | 251点数解答 | 2024-12-12 09:36:45)245
- Java实现银行账户类:含账户余额操作与测试代码(DeepSeek | 711点数解答 | 2025-03-23 21:38:57)257