Project Euler からの問題 48 の説明:
系列、1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317。系列の最後の 10 桁を検索します、1^1 + 2^2 + 3^3 + ... + 1000^1000。
Pythonでワンライナーを使用してこの問題を解決しました:
print sum([i**i for i in range(1,1001)])%(10**10)
Python では除算 mod n が非常に高速であることを思い出したので、ほぼ瞬時にそのようにしました。しかし、これが内部でどのように機能するのか (Python はどのような最適化を行うのか?)、なぜこれがそれほど高速なのかはまだわかりません。
これについて説明していただけますか?操作はmod 10**10
、全体の合計ではなく、リスト内包表記のすべての反復に適用されるように最適化されていますか?
$ time python pe48.py
9110846700
real 0m0.070s
user 0m0.047s
sys 0m0.015s