2015年8月23日日曜日

150823(3)

Ruby


どの2つの和も立方数(6)

(5)のコードを改善し、約3分かかっていたのを約2分に短縮。

=begin
どの2つの和も立方数となるような異なる4個の自然数の組を
(a, b, c, d)(ただし、a < b < c < d)とすると、
a + b = u^3,
a + c = v^3,
a + d = w^3,
b + c = x^3,
b + d = y^3,
c + d = z^3
とおける。
a, b, c, dの大小関係より、
u < v < x, w < y < z,
u < z, v < y
が成立。
また、
u^3 + z^3 = v^3 + y^3 = w^3 + x^3 (= a + b + c + d)
a = ((u^3 + v^3 + w^3) - (a + b + c + d)) / 2
が成立。
=end

# a + b + c + dの候補
Ta3 = 87539319
Ta4 = 6963472309248
N = 7750
# trueなら4通り以上で表せるものは存在しない
p (N - 1) ** 3 + N ** 3 < Ta4
h = {}
(1..N - 1).each{|i|
  (i + 1..N).each{|j|
    c = i * i * i + j * j * j
    if c >= Ta3
      h.key?(c) ? h[c] += 1 : h[c] = 1
    end
  }
}

# 3通りで表せるもの
ary30 = h.select{|k, v| v == 3}.keys
p ary30.sort!
ary33 = []
ary30.each{|i|
  ary3 = []
  j, s = 1, 0
  while s < 3
    k = i - j * j * j
    l = (k ** (1.0 / 3)).round
    if k == l * l * l
      ary3.push([j, l])
      s += 1
    end
    j += 1
  end
  ary33.push(ary3)
}
ary33.each{|i|
  i0 = i[1][0] ** 3 + i[1][1] ** 3
  j0 = i[0][0] ** 3 + i[1][0] ** 3 + i[2][0] ** 3 - i0
  if j0 > 0
    if j0 % 2 == 0
      a0 = j0 / 2
      p [a0, i[0][0] ** 3 - a0, i[1][0] ** 3 - a0, i[2][0] ** 3 - a0]
    end
  end
  j1 = i[0][0] ** 3 + i[1][0] ** 3 + i[2][1] ** 3 - i0
  if j1 > 0
    if j1 % 2 == 0
      a1 = j1 / 2
      p [a1, i[0][0] ** 3 - a1, i[1][0] ** 3 - a1, i[2][1] ** 3 - a1]
    end
  end
}

出力結果
true
[87539319, 119824488, 143604279, 175959000, 327763000, 700314552, 804360375, 958595904, 1148834232, 1407672000, 1840667192, 1915865217, 2363561613, 2622104000, 3080802816, 3235261176, 3499524728, 3623721192, 3877315533, 4750893000, 5544709352, 5602516416, 6434883000, 7668767232, 8849601000, 9190673856, 10458523413, 10499580728, 10833628897, 10942414875, 11261376000, 14725337536, 14978061000, 15170835645, 15326921736, 17950534875, 18778674824, 18908492904, 20976832000, 21303180171, 21717730125, 21989186856, 21994875000, 24646422528, 25882089408, 26059452841, 27996197824, 28989769536, 30025986417, 31018524264, 38007144000, 38786216625, 38947913424, 40970375000, 41099799384, 44357674816, 44820131328, 49256267697, 49698014184, 51479064000, 51728360859, 53072642168, 56065076613, 60353937000, 61350137856, 62190076347, 63816163551, 70796808000, 73525390848, 83181676032, 83668187304, 83996645824, 86669031176, 87352051752, 87539319000, 90091008000, 94487167656, 97840472184, 100545046875, 104622178752, 104687519391, 106872501519, 109568696139, 112422709000, 116514833589, 117802700288, 119068866189, 119824488000, 121366685160, 122026235968, 122615373888, 128274111000, 132651091125, 142220774241, 143604279000, 149498759592, 149707152504, 150229398592, 151267943232, 159486393528, 160780814649, 167814656000, 170425441368, 173741841000, 175913494848, 175959000000, 177853640328, 184877417088, 189855538327, 191137295349, 191450482496, 192323883843, 197171380224, 207056715264, 208438080643, 208475622728, 210662877789, 223969582592, 230083399000, 231918156288, 234201429000, 235645700472, 237565962991, 238939227000, 239226670592, 239483152125, 240207891336, 243349354053, 247620672000, 248148194112, 257906381824, 263254400136, 266927432616, 275895608625, 282380132151, 283488679656, 292507980219, 295445201625, 300634478586, 304057152000, 310289733000, 311583307392, 315498600963, 319616506125, 320465258659, 327763000000, 328798395072, 330175414296, 354861398528, 358561050624, 360113256776, 381240326376, 385100352000, 386581923000, 394050141576, 397584113472, 404407647000, 409612562415, 411832512000, 413826886872, 424581137344, 430080674247, 436252553000, 437440591000, 439386172407, 448520612904, 452965149000, 472233009528, 474894161469, 497520610776]
[1493580092, 2510949380, 7071213244, 51114333631]
[11948640736, 20087595040, 56569705952, 408914669048]

0 件のコメント:

コメントを投稿

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