返回

解锁阶乘后的奥秘:深入解析阶乘后的零(No.172)

见解分享

引言

在计算机科学和数学中,阶乘是一个基本概念,它表示某个自然数乘以其所有正整数因子所得的结果。例如,5 的阶乘(表示为 5!)等于 120,即 5 × 4 × 3 × 2 × 1。阶乘在组合、排列和概率等领域都有着广泛的应用。

然而,当你处理非常大的阶乘时,一个有趣的现象出现了:它们的末尾会出现大量的零。例如,100! 末尾有 24 个零。这一现象引起了数学家的极大兴趣,也催生了阶乘后的零这一研究课题。

LeetCode每日一题:阶乘后的零(No.172)

LeetCode 每日一题 No.172 要求你计算给定整数 n 的阶乘末尾有多少个零。例如,给定 n = 5,函数应返回 1,因为 5! 末尾有一个零。

思考

为了解决这个问题,我们需要深入理解阶乘后出现零的原因。当我们计算阶乘时,尾随的零数量是由阶乘中质因子 2 和 5 的个数决定的。这是因为 2 和 5 是唯一能够产生尾随零的质因子。

实现

基于以上思考,我们可以设计一个算法来计算阶乘后的零:

def trailing_zeros(n):
  """
  计算阶乘末尾的零的个数。

  参数:
    n: 正整数

  返回:
    阶乘末尾零的个数
  """

  # 初始化尾随零的个数
  zeros = 0

  # 循环遍历 2 和 5 的幂次
  for i in range(2, n + 1):
    while i % 2 == 0:
      i //= 2
      zeros += 1

    while i % 5 == 0:
      i //= 5
      zeros += 1

  return zeros

实例解析

让我们以 n = 5 为例来解析算法:

  • 首先,我们从 i = 2 开始循环,一直到 i = 5。
  • 对于 i = 2,i % 2 == 0 为真,因此我们对 i 除以 2 并将 zeros 加 1。重复此操作,直到 i % 2 == 1,得到 i = 1。此时,zeros = 1。
  • 对于 i = 3 和 i = 4,i % 2 和 i % 5 都不为真,因此我们跳过这些值。
  • 对于 i = 5,i % 5 == 0 为真,因此我们对 i 除以 5 并将 zeros 加 1。重复此操作,得到 i = 1。此时,zeros = 2。

因此,5! 末尾有 2 个零。

扩展与总结

本文深入探讨了 LeetCode 每日一题之阶乘后的零(No.172),并提供了算法实现和详实的实例解析。理解阶乘后出现零的原因至关重要,它使我们能够设计出高效的算法来计算阶乘末尾的零。通过掌握这些概念,你可以解决更多具有挑战性的数学难题,提升你的算法技能。