LoginSignup
1
0

More than 3 years have passed since last update.

Project Euler 030を解いてみる。「各桁の5乗」

Last updated at Posted at 2019-09-28

Project Euler 030

030

驚くべきことに, 各桁を4乗した数の和が元の数と一致する数は3つしかない.
1634 = 14 + 64 + 34 + 44
8208 = 84 + 24 + 04 + 84
9474 = 94 + 44 + 74 + 44
ただし, 1=14は含まないものとする. この数たちの和は 1634 + 8208 + 9474 = 19316 である.
各桁を5乗した数の和が元の数と一致するような数の総和を求めよ.

->次の問題

考え方

総当りばっかりやってますが、今回もそれで行きます。もうダメかもわからんね(^q^)
探索範囲について、各桁の5乗が最も大きくなるのは全ての桁が9の場合(9, 99, 999, 9999,...)です。99999の時、95×5=295245で各桁の5乗のほうが大きく、999999の時、95×6=354294で元の数のほうが大きくなります。元の数は桁が1つ増えるたびに約10倍ずつ増えていきますが、各桁の5乗は95=59049ずつしか増えていかないので7桁以上では必ず元の数のほうが大きくなります。
よって探索範囲は95×5=295245までで良さそうです。
あとは総当りをしていきます。

コード

euler030.py
def main():
    answer = 0
    for i in range(2, 9 ** 5 * 5):
        sum_five = sum([int(j) ** 5 for j in str(i)])
        if i == sum_five:
            answer += i
    print(answer)


if __name__ == '__main__':
    from time import time as t
    st = t()
    main()
    print(t() - st, 'sec')

paizaにて実行
結果
443839
0.6426656246185303 sec

1
0
0

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
1
0