ある整数aとb(a > b)を選んで、
・2×a×b
・a×a - b×b
・a×a + b×b
で得られる3つの数はピタゴラスの三角形の各辺になっている、
らしい。
とりあえず簡単に作ってみた。
public void Func() { int a, b; int ans1, ans2, ans3; a = 2; b = 1; ans1 = 2 * a * b; ans2 = a * a - b * b; ans3 = a * a + b * b; if (ans3 * ans3 == ans2 * ans2 + ans1 * ans1) { Debug.WriteLine(string.Format("(a, b) = ({0}, {1})", a, b)); Debug.WriteLine(string.Format("(ans1, ans2, ans3) = ({0}, {1}, {2})", ans1,ans2,ans3)); Debug.WriteLine(string.Format("{0} + {1} = {2}", ans1 * ans1, ans2 * ans2, ans3 * ans3)); } }
2と1でやってみた結果がこれ
(a, b) = (2, 1)
(ans1, ans2, ans3) = (4, 3, 5)
16 + 9 = 25
確かにピタゴラス数になってた。
計算してみればすぐ分かることで、
こんな感じ。
本には「整数」と書いてあったけど、整数じゃなかったらどうなんだろう。
(a, b) = (2.25, 1.25)
(ans1, ans2, ans3) = (5.625, 3.5, 6.625)
31.640625 + 12.25 = 43.890625
いけるやん。
aのほうが小さい場合は
(a, b) = (0.9, 1)
(ans1, ans2, ans3) = (1.8, -0.19, 1.81)
3.24 + 0.0361 = 3.2761
辺のひとつがマイナスになるな。
でもマイナスの辺を許容すれば三平方の式は成立してるのか。
追記:
a, bをdoubleでやってると、(a, b) = (2.1, 1)の場合にdouble関連の誤差が出てうまくいなかい。
回避手段の追加が必要だけど、そこまでやる気は出ない。