Project Euler: Problem30

5乗の和の場合には、n桁の数値を考えると 9^5*n までの数値しか作れない。

9^5 * 1 = 59049
9^5 * 2 = 118098
9^5 * 3 = 177147
9^5 * 4 = 236196
9^5 * 5 = 295245
9^5 * 6 = 354294
9^5 * 7 = 413343
...

5乗の和の側では7桁以上の数値は作れない。なので6桁の数値まで計算すればよくて、

object Problem30 {
  def pow(x : Int, n : Int) : Int = if (n==0) 1 else x * pow(x,n-1)
  def main(args : Array[String]) : Unit = {
    var result : Int = 0;
    for ( a <- List(0,1,2,3,4,5,6,7,8,9);
          b <- List(0,1,2,3,4,5,6,7,8,9);
          c <- List(0,1,2,3,4,5,6,7,8,9);
          d <- List(0,1,2,3,4,5,6,7,8,9);
          e <- List(0,1,2,3,4,5,6,7,8,9);
          f <- List(0,1,2,3,4,5,6,7,8,9) ){
      if ( a*100000+b*10000+c*1000+d*100+e*10+f ==
             pow(a,5)+pow(b,5)+pow(c,5)+pow(d,5)+pow(e,5)+pow(f,5) ) {
        println(a,b,c,d,e,f)
        result += a*100000+b*10000+c*1000+d*100+e*10+f;
             }
      }
    println(result-1)
  }
}

scala の for 文がなんかちょっとキモくてウケるのは秘密だ。