Project Euler with Ruby on WSL [Problem 9]

はぁどっこい

解いていきましょう

解答書かないなら ruby のタグ外してよくね、と思ったけど意地でも付けます

問題

Special Pythagorean triplet

A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,

 a^2 + b^2 = c^2 For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc.

私訳

ピタゴラス数の特殊例

自然数 a < b < c について  a^2 + b^2 = c^2 のもののうち a + b + c = 1000 を満たす組が一つだけ存在する。 積 abc を求めよ

解答方針

頻出するので  M = 1000, D = M/2 = 500 と置きます

 a^2 + b^2 = c^2 および  a + b + c = M, c = M - (a + b) から  c^2 = \left( M - (a + b) \right)^2 = a^2 + b^2

これを整理すると  \displaystyle
b = \frac{M(D-a)}{M-a}

ここまでくれば、あとは a < b < c かついずれも自然数、を条件に探索するだけですね a + b + c = 1000 ですから a < 1000/3 まで探索すれば十分です