というのを見つけた。
ある数の粘度は、すべての桁を掛けて出る答えが1桁になるまでにかかる積算の回数で表す。それぞれの桁の数を掛け算して出るのが2番目の数で、そのまた全桁の数を掛けて出るのが3番目の数…こうして1桁の数が出るまでやり、出るまでに重ねた掛け算の回数を数えるのだ。
例えば、77は粘度4だ。なぜなら1桁になるまで4回掛け算しなきゃならないからね(77-49-36-18-8)。粘度1で一番小さい数は10、粘度2で一番小さい数は25、粘度3で一番小さい数は39、粘度4の最小数は77だ。では、粘度5で一番小さい数は何?
Scheme でやってみた。特に何の工夫もなく力任せに1から順に試していって粘度が5になる数を見つけたらそれを返すだけ。
(define divmod (lambda (n m) (list (div n m) (modulo n m)))) (define mul (lambda (n) (let loop ((dm (divmod n 10)) (l '())) (if (= (car dm) 0) (apply * (cons (cadr dm) l)) (loop (divmod (car dm) 10) (cons (cadr dm) l)))))) (define nend (lambda (n) (let loop ((x n) (i 0)) (if (< x 10) i (loop (mul x) (+ i 1)))))) (define nend_smallest (lambda (n) (let loop ((i 1)) (if (= (nend i) n) i (loop (+ i 1)))))) (print (nend_smallest 5))
実行結果:
^o^ > gosh nend.scm 679