Problem 30 - 各桁をn乗した和

求めてみたけど、まだ不明な点がある。

Problem 30 - PukiWiki

驚くべきことに, 各桁を4乗した和が元の数と一致する数は3つしかない.

* 1634 = 1^4 + 6^4 + 3^4 + 4^4
* 8208 = 8^4 + 2^4 + 0^4 + 8^4
* 9474 = 9^4 + 4^4 + 7^4 + 4^4

ただし, 1=1^4は含まないものとする. この数たちの和は 1634 + 8208 + 9474 = 19316 である.

各桁を5乗した和が元の数と一致するような数の総和を求めよ.

終わり方がイマイチ。number->listは略。

(define (problem30 k)
  (define (iter n)
    (cond ((= n 1) '())
          ((= n (apply + (map (lambda (n)
                                   (expt n k))
                                 (number->list n)))) (cons n (iter (- n 1)))) 
          (else
              (iter  (- n 1)))))
  (iter (expt 9 (+ k 1))))

(problem30 4) ; (9474 8208 1634)
(apply + (problem30 4)) ; 19316
(problem30 5) ; (194979 93084 92727 54748 4151 4150)
(apply + (problem30 5)) ; 443839

なぜ(expt 9 (+ k 1)))までで良いのかが解らない。ちと考えてみる。