驚くべきことに, 各桁を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 件のコメント:
コメントを投稿