Project Euler 034
145は面白い数である. 1! + 4! + 5! = 1 + 24 + 120 = 145となる.
各桁の数の階乗の和が自分自身と一致するような数の和を求めよ.
注: 1! = 1 と 2! = 2 は総和に含めてはならない.
->次の問題
考え方
これも総当り、やっていきます。
総当り範囲は、999999(6桁):9!×6=2177280(7桁)、9999999(7桁):9!×7=2540160(7桁)、99999999(8桁):9!×8=2903040(7桁)となり、8桁以降は必ず各桁の階乗の合計が小さくなります。よって9!×7までを調べれば網羅できそうです。
コード
euler034.py
from math import factorial
def main():
answer = 0
for i in range(3, factorial(9) * 7):
sum_factorical = 0
for digit in str(i):
sum_factorical += factorial(int(digit))
if i == sum_factorical:
print(i)
answer += i
print('answer:', answer)
if __name__ == '__main__':
main()
結果
145
40585
answer: 40730
かなり計算に時間がかかってしまいます… 短縮案が必要です。
ついに解答のストックが尽きてしまいました。毎日更新できなくなりそうです。