2015年12月14日月曜日

151214(2)

Ruby


Euler brick(2)

http://mathworld.wolfram.com/EulerBrick.html
上記の記事を読むと、
Saunderson によって、Euler brickを作る方法が見つけられている。
(ただし、全てのEuler brickを作れるわけではない。)
ピタゴラス数から作るのだが、
ここでは、原始ピタゴラス数から作られるものだけを考え、
辺の組を出力してみる。

def f(a, b, c, n)
  return [] if 4 * a * b * c > n
  i, j, k = a * (4 * b * b - c * c).abs, b * (4 * a * a - c * c).abs, 4 * a * b * c
  l = Math.sqrt(i * i + j * j + k * k).to_i
  # 斜辺も整数かどうか?
  ary = [[i, j, k, l * l == i * i + j * j + k * k]]
  ary += f( a - 2 * b + 2 * c,  2 * a - b + 2 * c,  2 * a - 2 * b + 3 * c, n)
  ary += f( a + 2 * b + 2 * c,  2 * a + b + 2 * c,  2 * a + 2 * b + 3 * c, n)
  ary += f(-a + 2 * b + 2 * c, -2 * a + b + 2 * c, -2 * a + 2 * b + 3 * c, n)
  return ary
end

p f(3, 4, 5, 10 ** 7)

出力結果
[[117, 44, 240, false], [2035, 828, 3120, false], [11753, 10296, 16800, false], [42471, 54280, 59040, false], [117469, 194220, 161040, false], [272987, 550116, 371280, false], [561105, 1329328, 759360, false], [1052623, 2861136, 1419840, false], [1839941, 5637060, 2476080, false], [3039939, 10356940, 4084080, false], [4796857, 17980776, 6436320, false], [7285175, 29786328, 9765600, false], [1281735, 2229128, 5063520, false], [229229, 1274580, 2380560, false], [213785, 325008, 770880, false], [14715, 148148, 267120, false], [922077, 1721764, 2574000, false], [15939, 18460, 48720, false], [689481, 146960, 1110720, false], [5111703, 3736304, 7423680, false], [3455641, 3369960, 9653280, false], [157157, 593676, 942480, false], [3153645, 4106492, 5937360, false], [495, 4888, 8160, false], [274527, 7336, 480480, false], [2866149, 1651580, 4255440, false], [736255, 539352, 1815840, false], [27755, 42372, 62160, false], [3828995, 561132, 7046160, false], [201663, 186416, 262080, false], [851499, 580060, 799920, false], [2677103, 1458504, 1990560, false], [6956235, 3172148, 4302480, false], [15798015, 6209632, 8388480, false]]

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。