geo_analysisの日記

エンジニアになりたい無職のProjectEuler

プロジェクトオイラー48

プロジェクトオイラーの97を解いていたところ、ゴリ押しで説いていた問題48が綺麗に解けたので解答を書きます。Python3で解きました。
問題
Problem 48 - Project Euler

問題は簡単で、
{ \displaystyle
 \sum_{n=1}^{1000} n^n
}
の下10桁を求めなさいというものです。

解答

import time
start = time.time()
n = 0 #下10桁を表す
'''
n^n = n * n * \cdot * nとみて、for文を作り、 n^nの下10桁を残す。
これを1から1000まで動かして和をとり、最後に再び下10桁を残す。
'''
for i in range(1, 1001):
    m = 1
    for j in range(i):
        m = (m * i) % 10**10
    n += m
n = n % (10**10)
print(n)
print(time.time()- start)

f:id:geo_analysis:20160721010758p:plain