/* Euler #9 in Picat. Problem 9 """ A Pythagorean triplet is a set of three natural numbers, a b c, for which, a^2 + b^2 = c^2 For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc. """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => time(go). go => euler9. triplet(A,B,C) = Prod => LD = [A,B,C], LD :: 1..500, A + B + C #= 1000, A #=< B, % symmetry breaking B #=< C, A**2 + B**2 - C**2 #= 0, Prod #= A * B *C, solve([degree,split], LD). % 0.032s euler9 => Prod = triplet(A,B,C), writeln([A,B,C]), writeln(Prod). % 7.17s euler9b => N = 500, Sol = findall(Prod, (between(1,N,C), between(1,C,B), between(1,B,A), A + B + C = 1000, A**2 + B**2 - C**2 = 0, Prod = A*B*C)), println(Sol). % 1.53s euler9c => P = [], foreach(C in 1..500, B in 1..C, A in 1..B) if A + B + C = 1000, A**2 + B**2 - C**2 = 0 then Prod = A*B*C, P := P ++ [Prod] end end, println(P). % 0.883s euler9d => println([A*B*C : C in 1..500,B in 1..C, A in 1..B, A+B+C == 1000, A**2+B**2==C**2 ].first).