プロジェクトオイラー30
ProjectEulerの問題30をPython3を使って解きました。
問題
Problem 30 - Project Euler
この問題は、自然数nで、
n = nの各桁の数字の5乗の和
となるものを見つけ、全て足し合わせなさいという問題です。コンピュータに上の式を満たす自然数を計算させるだけで良いのですが、上限を定めないといつまでも終わりません。そこで大雑把にまず、10^n > 9^5 ×n となる自然数 n を見つけます。この n が上限になることは明らかです。後はプログラムを書くだけ。
import time start = time.time() n = 1 #n桁の整数 = 各桁の整数の5乗の和 となり得る桁数nの上限 while 10**n <= (9**5) * n: n += 1 ''' 上を実行するとn <= 6だとわかる ''' integers = [(a, b, c, d, e, f) \ for a in range(10) \ for b in range(10) \ for c in range(10) \ for d in range(10) \ for e in range(10) \ for f in range(10) ] #6桁までの整数を表す answer = -1 #問の答え(1 = 1^5 を除く) for a, b, c, d, e, f in integers: #整数 = 各桁の整数の5乗の和となる数を見つけて足すぜ! if 100000*a + 10000*b + 1000*c + 100*d + 10*e + f == a**5 + b**5 + c**5 + d**5 + e**5 + f**5: answer += 100000*a + 10000*b + 1000*c + 100*d + 10*e + f print(answer) print(time.time() - start)