2015年4月25日土曜日

150425

Ruby


Taxi-cab numbers: sums of 2 cubes in more than 1 way

コードを書いてみた。
オンライン整数列大辞典の
A001235(http://oeis.org/A001235/list)
と比較し、答え合わせしてみる。

M = 704977 ** (1.0 / 3)
N = 36
h = {}
(0..M).each{|a|
  (0..a).each{|b|
    n = a ** 3 + b ** 3
    h[n] == nil ? h[n] = 1 : h[n] += 1
  }
}
ary = h.select{|k, v| v > 1}.keys[0..N - 1].sort

# OEIS A001235のデータ
ary0 =
[1729,4104,13832,20683,32832,39312,40033,46683,
 64232,65728,110656,110808,134379,149389,165464,
 171288,195841,216027,216125,262656,314496,320264,
 327763,373464,402597,439101,443889,513000,513856,
 515375,525824,558441,593047,684019,704977]
# 一致の確認
p ary == ary0

さて
   (6a^2 - 4ab + 4b^2)^3 + (3b^2 + 5ab - 5a^2)^3
= (6b^2 - 4ab + 4a^2)^3 + (3a^2 + 5ab - 5b^2)^3
という等式が成り立つので、
この形に分けられるものを出力する。
(ただし、a,bは0以上の整数に限定しておくものとする。)

M1 = 10
h = {}
(0..M1).each{|a|
  (0..a - 1).each{|b|
    u = 6 * b ** 2 - 4 * a * b + 4 * a ** 2
    if u > 0
      v = 3 * b ** 2 + 5 * a * b - 5 * a ** 2
      if v > 0
        w = 6 * a ** 2 - 4 * a * b + 4 * b ** 2
        n = w ** 3 + v ** 3
        h[n] == nil ? h[n] = 1 : h[n] += 1
      end
    end
  }
}
p h.keys.sort

出力結果
[593047, 2418271, 7620661, 16387189, 20072017, 37955008, 46343059, 79692193, 967
53187, 154769344, 186595201]

0 件のコメント:

コメントを投稿

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