題意どおりに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)
さすがにこれでは雑すぎるので、cはaとbと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)