Problem 9 "Special Pythagorean triplet"
A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
a2 + b2 = c2
For example, 32 + 42 = 9 + 16 = 25 = 52.
There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.
問 9 「特別なピタゴラス数」
ピタゴラス数(ピタゴラスの定理を満たす自然数)とは a < b < c で以下の式を満たす数の組である.
a2 + b2 = c2
例えば, 32 + 42 = 9 + 16 = 25 = 52 である.
a + b + c = 1000 となるピタゴラスの三つ組が一つだけ存在する.
これらの積 abc を計算しなさい.
fn main() { let mut ans = None; 'exploration: for m in 2..=(499f32.sqrt() as u32) { for n in 1..m { let a = m * m - n * n; let b = 2 * m * n; let c = m * m + n * n; if a + b + c == 1000 { ans = Some(a * b * c); break 'exploration; } } } println!("{:?}", ans); assert_eq!(ans.unwrap(), 31875000); }
package main
import (
"fmt"
"math"
"testing"
)
func Example() {
var ans uint32
Exploration:
for m := uint32(2); m <= uint32(math.Sqrt(float64(499))); m++ {
for n := uint32(1); n < m; n++ {
a := m*m - n*n
b := 2 * m * n
c := m*m + n*n
if a+b+c == 1000 {
ans = a * b * c
break Exploration
}
}
}
fmt.Println(ans)
// Output: 31875000
}
→ Go playground
function assert(condition: any, msg?: string): asserts condition {
if (!condition) {
throw new Error(msg);
}
}
let ans = 0;
exploration:
for (let m = 2; m <= (Math.sqrt(499) | 0); m++) {
for (let n = 1; n < m; n++) {
const a = m * m - n * n;
const b = 2 * m * n;
const c = m * m + n * n;
if (a + b + c === 1000) {
ans = a * b * c;
break exploration;
}
}
}
console.log(ans);
assert(ans === 31875000);
→ TypeScript playground