特殊的毕达哥拉斯三元组
作者: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 中可以加快速度!
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; } } }