【发布时间】:2018-02-25 21:35:08
【问题描述】:
我正在处理 Project Euler (#188) 中的一个问题,但我遇到了一堵墙。问题说明如下:
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