LoginSignup
2
1

More than 3 years have passed since last update.

Project Euler 034を解いてみる。「桁の階乗」

Last updated at Posted at 2019-10-02

Project Euler 034

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

かなり計算に時間がかかってしまいます… 短縮案が必要です。
ついに解答のストックが尽きてしまいました。毎日更新できなくなりそうです。

2
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1