来自 Project Euler 的问题 48 描述:
系列,1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317。找到系列的最后十位,1^1 + 2^2 + 3^3 + ... + 1000^1000。
我刚刚在 Python 中使用单线解决了这个问题:
print sum([i**i for i in range(1,1001)])%(10**10)
我几乎立即就这样做了,因为我记得除法 mod n 在 Python 中非常快。但我仍然不明白这在幕后是如何工作的(Python 做了哪些优化?)以及为什么这么快。
你能给我解释一下吗?该mod 10**10
操作是否针对列表推导的每次迭代而不是整个总和进行了优化?
$ time python pe48.py
9110846700
real 0m0.070s
user 0m0.047s
sys 0m0.015s