特殊的毕达哥拉斯三元组

作者:Flavio Poletti

https://projecteuler.net/problem=9

毕达哥拉斯三元组是由三个自然数组成的集合,a < b < c,其中:

a^2 + b^2 = c^2

例如,3^2 + 4^2 = 9 + 16 = 25 = 5^2。

只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求出乘积 abc。

解决方法

$x + $y + $z = 1000 意味着我们可以解出 $z

$z = 1000 - $x - $y

我们可以安全地假设 $x < $y < $z,因为这三个数字将是不同的并且可以排序。因此,只需将 $x 从 1 迭代到 1000/3,将 $y 从 $x + 1 迭代到 1000 的中间值,并相应地得到 $z。这在 Rakudo 中可以加快速度!

源代码:prob009-polettix.pl

use v6;

my $sum = 1000;
for 1 .. ($sum / 3) -> $x {
    for ($x + 1) .. (($sum + $x) / 2) -> $y {
        my $z = $sum - $x - $y;
        if ($z * $z == $x * $x + $y * $y) {
            say $x * $y * $z;
            exit;
        }
    }
}