Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。
問題
$145$は面白い数である. $1! + 4! + 5! = 1 + 24 + 120 = 145$となる.
各桁の数の階乗の和が自分自身と一致するような数の和を求めよ.
注: $1! = 1$ と $2! = 2$ は総和に含めてはならない.
解答
n>=7で10**n -1 > 9!*nなので、最高でも9!*7までの範囲を検索すれば十分である。
いつもこの辺の「どこまでやれば十分なのか」がよく分からない。
$999999 < 9! * 6 = 2177280$、$9999999 > 9! * 7 = 2540160$なので、
$2540160$までやれば十分か。
seq 3 2540160 |
awk -v FS= '{printf $0" ";s=0;for(i=1;i<=NF;i++){x=1;for(j=1;j<=$i;j++){x*=j};s+=x};print s}' |
awk '$1==$2{s+=$1}END{print s}'
40730
答え合わせ
こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/034.html