세 변의 길이가 모두 자연수 {a, b, c}인 직각삼각형의 둘레를 p 로 둘 때, p = 120 을 만족하는 직각삼각형은 아래와 같이 세 개가 있습니다.
{20, 48, 52}, {24, 45, 51}, {30, 40, 50}
1000 이하의 둘레 p에 대해서, 직각삼각형이 가장 많이 만들어지는 p의 값은 얼마입니까?
30초가 넘게 걸린다.
식을 좀 예쁘게 정리하면 좀 빠르게 구할 수 있겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/usr/bin/env perl use 5.010; use strict; use warnings; my $r = 0; my $c = 0; for my $g (3..1000) { my $t = 0; for my $i (1..$g/3) { for my $j (1..($g-$i)/2) { my @a = sort {$a <=> $b} ($i ,$j, $g-$i-$j); $t++ if ($a[2] <= $a[1] + $a[0] and $a[2]**2 == $a[1]**2 + $a[0]**2); } } if ($t > $c) { $c = $t; $r = $g; } } say $r; |