驚くべきことに, 各桁を4乗した数の和が元の数と一致する数は3つしかない.
この数たちの和は 1634 + 8208 + 9474 = 19316 である.
各桁を5乗した数の和が元の数と一致するような数の総和を求めよ.
1634 = 14 + 64 + 34 + 44
8208 = 84 + 24 + 04 + 84
9474 = 94 + 44 + 74 + 44
ただし, 1=14は含まないものとする. 8208 = 84 + 24 + 04 + 84
9474 = 94 + 44 + 74 + 44
この数たちの和は 1634 + 8208 + 9474 = 19316 である.
各桁を5乗した数の和が元の数と一致するような数の総和を求めよ.
95は59049ですから, 対象となる数の30万を超えることはありません.
- 2から30万までの整数のリストを作る.
- 各桁を5乗した結果の和を求める.
- 元の数と和が一致するものだけを残す.
手続きは次のようになります.
(require srfi/1) (define (decimal-format nbr) (define (loop ans n) (if (= 0 n) ans (loop (cons (remainder n 10) ans) (quotient n 10)))) (loop () nbr)) (define (digit-fifth-powers n) (fold + 0 (map (lambda (x) (* x x x x x)) (decimal-format n))))
計算してみます.
ようこそ DrRacket, バージョン 5.3.3 [3m]. 言語: Pretty Big; memory limit: 2048 MB. 443839 > (filter (lambda (n) (= n (digit-fifth-powers n))) (iota 300000 2)) (4150 4151 54748 92727 93084 194979) > (+ 4150 4151 54748 92727 93084 194979) 443839 >
0 件のコメント:
コメントを投稿