【问题标题】:Efficiently count trailing zeros of numbers from a factorial [duplicate]有效地计算阶乘中数字的尾随零[重复]
【发布时间】:2017-07-10 01:46:56
【问题描述】:

我正在尝试根据this 问题使用 python 计算阶乘中尾随零的数量。到目前为止,我的解决方案如下所示:

import math
def zeros(n):
    return len(str(math.factorial(n))) - len(str(math.factorial(n)).rstrip('0'))

这适用于较小的数字,但其中一项测试是1000000000!,我的算法效率低下导致系统崩溃。

过去我一直在努力提高算法的效率,我希望能提供有关此主题的任何一般性建议,以及任何可以使该算法更高效的具体指示。

【问题讨论】:

  • 数字末尾的0是数字中出现因子10的次数。你绝对应该使用这个属性来获得一个有效的算法来回答这个问题。
  • this
  • 由于问题已关闭,我无法发布我正在输入的答案,这有点弱。我的回答侧重于消除程序冗余(在这种情况下,它不能与数学减少相比,而是一种更通用的方法)。链接:pastebin.com/4a51WQgZ
  • 这似乎很明显,但这些是 十进制 零(即基数 10 或基数 10)。对于不同的基地,答案是不同的。

标签: python algorithm performance primes factorial


【解决方案1】:

与其直接评估阶乘计算长度,不如使用代数性质。

例如,不要累积总数,而是跟踪 2 和 5 的倍数。

【讨论】:

  • 五个就够了。
猜你喜欢
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多