【问题标题】:Python 3 pow() / ** timing outPython 3 pow() / ** 超时
【发布时间】:2018-02-25 21:35:08
【问题描述】:

我正在处理 Project Euler (#188) 中的一个问题,但我遇到了一堵墙。问题说明如下:

我在python中的解决方案如下:

Q = input()
List1 = []
List2 = []
Answers = []
for i in range(int(Q)):
    List1.append(input())
    List2.append(List1[i].split(" "))
    for j in range(int(List2[i][1])):
        List2[i][0] = int(List2[i][0]) ** int(List2[i][0])
    Answers.append(int(List2[i][0]) % int(List2[i][2]))
for k in range(len(Answers)):
    print(Answers[k])

它非常适合较小的输入,但是一旦指数变得非常大,程序就会运行很长时间,以至于我得到一个超时错误。有什么办法可以解决 python 3 求幂的明显低效问题,还是我可能做错了什么?任何帮助表示赞赏!

【问题讨论】:

  • 使用pow的第二个参数:docs.python.org/3/library/functions.html#pow
  • 不是 python 效率低下,而是算法效率低下。
  • 我很确定使用内置的 expmod 会解决问题的重点和精神。这就像要求您实现平方根近似,而您只使用了sqrt。如果你这样做是为了一个成绩,你可能不会得到很多学分。
  • 这可能还不够,现在注意到还有一个循环最多 10^18 次迭代。
  • 你应该重新考虑你的算法。这是一个数学问题。 Project Euler 的重点是考虑不是蛮力解决方案

标签: python python-3.x exponential pow


【解决方案1】:

涉及的数字太大了。您正试图蛮力解决这个问题,但这是行不通的——所涉及的一些数字实际上可能会占用 TB 的空间——甚至是太多的内存,以至于它不适合可观测的宇宙。 Python 帮不了你;有一些答案涉及更聪明的数学。尝试打印一些求幂结果 - 例如,三的幂。看看剩下的。可能会有一些重复或模式。遵循并概括这一点。

【讨论】:

  • 糟糕,我没有注意到问题的年龄。留在这里以供将来的提问者使用。
猜你喜欢
  • 1970-01-01
  • 2020-06-11
  • 2016-08-11
  • 2021-08-26
  • 1970-01-01
  • 2023-03-15
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多