LoginSignup
0
0

More than 1 year has passed since last update.

【Project Euler】Problem 30: 各桁の5乗の和

Posted at
  • 本記事はProjectEulerの「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

問題 30:各桁の5乗の和

原文 Problem 30: Digit fifth powers

問題の要約:各桁の5乗の和が元の数と同じになる数の合計を求めよ

この問題では数の範囲が指定されていないので、どこまで調べれば良いかがポイントですね。桁数が$d$のとき各桁の5乗の和の最大値は$(9^5 \times d)$となるのでプログラムで調べてみると。

for d in range(1,8):
   print(f"digit={d}, {10**(d-1)}-{10**d-1} {1}-{9**5*d}")
d=1, 1-9 1-59049
d=2, 10-99 1-118098
d=3, 100-999 1-177147
d=4, 1000-9999 1-236196
d=5, 10000-99999 1-295245
d=6, 100000-999999 1-354294
d=7, 1000000-9999999 1-413343

7桁になると2つの値の範囲が重なっていないので、6桁まで、より正確にいうと$9^5*6=354294$までチェックすればよいので、以下のプログラムになります。

def digPowSum(n,pw):
  return sum([int(d)**pw for d in str(n)])

print(f"Answer: {sum([n for n in range(2,(9**5)*6+1) if n==digPowSum(n,5)])}")

(開発環境:Google Colab)

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