sub triang_decompose_3 { my($goal, $found, $n0, $n1, $n2, $rem2, $rem1); for $goal (0 .. 80) { $found = 0; $n0 = int(sqrt(2*$goal+1) - 1/2); while (!$found && 0 <= $n0) { $rem2 = $goal - $n0*($n0+1)/2; $n1 = floor(sqrt(2*$rem2+1) - 1/2); while (!$found && 0 <= $n1) { $rem1 = $rem2 - $n1*($n1+1)/2; $n2 = floor(sqrt(2*$rem1+1) - 1/2); if ($rem1 == $n2*($n2+1)/2) { say $goal, " = ", $n0*($n0+1)/2, " + ", $n1*($n1+1)/2, " + ", $n2*($n2+1)/2; $found = 1; } $n1--; } $n0--; } if (!$found) { say $goal, " has no decomposition."; } } }