``````#!/usr/bin/env perl
use warnings;
use strict;
use Math::Prime::Util qw/:all/;

# x+y = a^2    x = a^2 - y
# x-y = b^2    a^2-y-y = b^2  2y = b^2-a^2  y = (b^2-a^2)/2
# x+z = c^2    z = c^2 - z
# x-z = d^2    c^2-z-z=d^2    2z = c^2-d^2  z = (c^2-d^2)/2
# y+z = e^2
# y-z = f^2                                 x = (e^2-f^2)/2

# x+y = a^2   x-y = b^2     ===>   2x = a^2+b^2   x=(a^2+b^2)/2
# x+z = c^2   x-z = d^2     ===>   2z = c^2-d^2   z=(c^2-d^2)/2
# y+z = e^2   y-z = f^2     ===>   2y = e^2+f^2   y=(e^2+f^2)/2

# a^2 = x+y = x+y+z-z = x+z + y-z  = c^2 + f^2
# e^2 = y+z = y+z+x-x = y+x -(x-z) = a^2 - d^2
# b^2 = x-y = x-y+z-z = x+z -(y+z) = c^2 - e^2

foreach my \$a (4 .. 1000000) {
my \$a2 = \$a*\$a;
foreach my \$c (3 .. \$a-1) {
my \$c2 = \$c*\$c;
my \$f2 = \$a2 - \$c2;
next unless \$f2 >= 0 && is_power(\$f2,2);
foreach my \$d (1 .. \$c-1) {
next if (\$d ^ \$c) & 1;   # c and d must have same parity
my \$d2 = \$d*\$d;
my \$e2 = \$a2 - \$d2;
my \$b2 = \$c2 - \$e2;
next if \$e2 <= 0 || \$b2 <= 0;
#next if ((\$a2+\$b2) & 1) || ((\$e2+\$f2) & 1) || ((\$c2-\$d2) & 1);
next unless is_power(\$e2,2) && is_power(\$b2,2);
my \$x = (\$a2+\$b2) >> 1;
my \$y = (\$e2+\$f2) >> 1;
my \$z = (\$c2-\$d2) >> 1;
my \$result = \$x+\$y+\$z;
die "\$result  [\$x \$y \$z]\n";
}
}
}
``````