PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 119 / 数字べき乗和

512は興味深い数である。各桁の和を何乗かしたものに等しくなっているからである。

5+1+2 = 8, 8^3=512

この特性をもつ他の数はたとえば 614656 = 28^4 がある。この数列の第 n 項を a_n と定義し, また2桁以上であるとしよう。a2 = 512, a10 = 614656 となる。

a30 を求めよ。

Problem 119 - Project Euler

判定条件は Total[IntegerDigits[n^k]] == n

n, k の範囲を適当にしぼって For ループでやりました。条件をみたす n^k を AppendTo していって,最後に Sort して30項目を求めます。


ループしない解法がこちら。Tuples で {n, k} のリストを作り,これを判定条件に渡して適するものを探します。こちらの方が関数型っぽくて Mathematica 向きかと思ったのですが,計算時間はほとんど同じでした。