ScalaでProject Euler(16)

Problem 9

題意どおりに3辺の取りうる値と条件をforの中に書いてしまえば解けます。

val N = 1000
val s = for(a <- 1 to N; b <- (a + 1) to N; c <- (b + 1) to N
            if a + b + c == N && a * a + b * b == c * c)
                yield a * b * c
println (s.toList)

さすがにこれでは雑すぎるので、cabとNから求めることにして範囲を狭めると、

val N = 1000
val s = for(a <- 1 to (N / 3); b <- a to (N / 2);
            val c = N - a - b if a * a + b * b == c * c)
                yield a * b * c
println (s.toList)