The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/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";
    }
  }
}