2015年8月23日日曜日

150823(2)

Ruby


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

(4)のコードはhの算出に時間がかかっていた。
これを改善することで、少し速くなった。

=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の候補
N = 7750
h = {}
(1..N - 1).each{|i|
  (i + 1..N).each{|j|
    c = i * i * i + j * j * j
    h.key?(c) ? h[c] = h[c].push(i) : h[c] = [i]
  }
}

# 3通りで表せるもの
h3 = h.select{|k, v| v.size == 3}
p h3
h3.each{|i|
  j0 = i[1][0] ** 3 + i[1][1] ** 3 + i[1][2] ** 3 - i[0]
  if j0 > 0
    if j0 % 2 == 0
      a0 = j0 / 2
      p [a0, i[1][0] ** 3 - a0, i[1][1] ** 3 - a0, i[1][2] ** 3 - a0]
    end
  end
  # j1 = i[1][0] ** 3 + i[1][1] ** 3 + (i[0] - i[1][2] ** 3) - i[0]
  j1 = i[1][0] ** 3 + i[1][1] ** 3 - i[1][2] ** 3
  if j1 > 0
    if j1 % 2 == 0
      a1 = j1 / 2
      p [a1, i[1][0] ** 3 - a1, i[1][1] ** 3 - a1, i[0] - i[1][2] ** 3 - a1]
    end
  end
}
# 4通り以上で表せるものはN = 7750のときは存在しない
p h.select{|k, v| v.size > 3}

出力結果
{18778674824=>[8, 575, 1899], 1915865217=>[9, 484, 969], 119824488=>[11, 90, 346], 804360375=>[15, 198, 295], 150229398592=>[16, 1150, 3798], 15326921736=>[18, 968, 1938], 958595904=>[22, 180, 692], 51728360859=>[27, 1452, 2907], 6434883000=>[30, 396, 590], 3235261176=>[33, 270, 1038], 53072642168=>[36, 1454, 2543], 122615373888=>[36, 1936, 3876], 7668767232=>[44, 360, 1384], 21717730125=>[45, 594, 885], 132651091125=>[45, 2157, 3269], 239483152125=>[45, 2420, 4845], 38786216625=>[50, 1390, 1618], 413826886872=>[54, 2904, 5814], 14978061000=>[55, 450, 1730], 51479064000=>[60, 792, 1180], 25882089408=>[66, 540, 2076], 175959000=>[70, 198, 315], 424581137344=>[72, 2908, 5086], 100545046875=>[75, 990, 1475], 41099799384=>[77, 630, 2422], 3080802816=>[81, 456, 904], 61350137856=>[88, 720, 2768], 173741841000=>[90, 1188, 1770], 87352051752=>[99, 810, 3114], 310289733000=>[100, 2780, 3236], 275895608625=>[105, 1386, 2065], 119824488000=>[110, 900, 3460], 143604279=>[111, 359, 408], 3499524728=>[116, 350, 1169], 411832512000=>[120, 1584, 2360], 159486393528=>[121, 990, 3806], 104622178752=>[124, 928, 1271], 122026235968=>[132, 873, 3720], 207056715264=>[132, 1080, 4152], 1407672000=>[140, 396, 630], 263254400136=>[143, 1170, 4498], 21303180171=>[147, 1107, 1666], 328798395072=>[154, 1260, 4844], 24646422528=>[162, 912, 1808], 381240326376=>[165, 2768, 5376], 404407647000=>[165, 1350, 5190], 87539319=>[167, 228, 255], 300634478586=>[183, 1555, 5009], 5544709352=>[207, 842, 1076], 4750893000=>[210, 594, 945], 10499580728=>[219, 1262, 1604], 1148834232=>[222, 718, 816], 1840667192=>[225, 372, 681], 27996197824=>[232, 700, 2338], 83181676032=>[243, 1368, 2712], 11261376000=>[280, 792, 1260], 319616506125=>[288, 1046, 5085], 170425441368=>[294, 2214, 3332], 327763000=>[300, 339, 510], 197171380224=>[324, 1824, 3616], 3877315533=>[333, 1077, 1224], 700314552=>[334, 456, 510], 3623721192=>[348, 761, 1098], 94487167656=>[348, 1050, 3507], 21994875000=>[350, 990, 1575], 21989186856=>[393, 1392, 2186], 439386172407=>[399, 743, 5799], 385100352000=>[405, 2280, 4520], 44357674816=>[414, 1684, 2152], 26059452841=>[417, 1290, 2193], 38007144000=>[420, 1188, 1890], 10458523413=>[438, 1058, 1269], 83996645824=>[438, 2524, 3208], 9190673856=>[444, 1436, 1632], 239226670592=>[449, 4076, 4800], 14725337536=>[450, 744, 1362], 223969582592=>[464, 1400, 4676], 60353937000=>[490, 1386, 2205], 2363561613=>[501, 684, 765], 15170835645=>[517, 709, 1733], 17950534875=>[555, 1795, 2040], 106872501519=>[558, 2487, 3751], 90091008000=>[560, 1584, 2520], 119068866189=>[576, 821, 3573], 437440591000=>[580, 1750, 5845], 2622104000=>[600, 678, 1020], 142220774241=>[612, 3084, 3410], 210662877789=>[613, 3645, 4482], 149707152504=>[621, 2526, 3228], 128274111000=>[630, 1782, 2835], 283488679656=>[657, 3786, 4812], 31018524264=>[666, 2154, 2448], 5602516416=>[668, 912, 1020], 235645700472=>[672, 3102, 4039], 49698014184=>[675, 1116, 2043], 28989769536=>[696, 1522, 2196], 175959000000=>[700, 1980, 3150], 10833628897=>[738, 988, 1326], 38947913424=>[738, 1115, 1974], 109568696139=>[750, 1363, 2154], 234201429000=>[770, 2178, 3465], 49256267697=>[777, 2513, 2856], 175913494848=>[786, 2784, 4372], 257906381824=>[807, 1812, 3400], 354861398528=>[828, 3368, 4304], 208475622728=>[834, 2580, 4386], 10942414875=>[835, 1140, 1275], 304057152000=>[840, 2376, 3780], 83668187304=>[876, 2116, 2538], 73525390848=>[888, 2872, 3264], 8849601000=>[900, 1017, 1530], 117802700288=>[900, 1488, 2724], 243349354053=>[900, 1309, 4893], 189855538327=>[903, 1359, 3591], 386581923000=>[910, 2574, 4095], 177853640328=>[937, 3554, 4050], 266927432616=>[985, 4056, 4394], 149498759592=>[986, 1626, 3867], 56065076613=>[992, 1548, 2742], 104687519391=>[999, 3231, 3672], 18908492904=>[1002, 1368, 1530], 121366685160=>[1034, 1418, 3466], 97840472184=>[1044, 2283, 3294], 160780814649=>[1065, 3382, 3828], 143604279000=>[1110, 3590, 4080], 230083399000=>[1125, 1860, 3405], 30025986417=>[1169, 1596, 1785], 20976832000=>[1200, 1356, 2040], 191137295349=>[1221, 3949, 4488], 282380132151=>[1314, 3174, 3807], 248148194112=>[1332, 4308, 4896], 44820131328=>[1336, 1824, 2040], 397584113472=>[1350, 2232, 4086], 231918156288=>[1392, 3044, 4392], 247620672000=>[1425, 2640, 2944], 315498600963=>[1443, 4667, 5304], 86669031176=>[1476, 1976, 2652], 311583307392=>[1476, 2230, 3948], 40970375000=>[1500, 1695, 2550], 63816163551=>[1503, 2052, 2295], 409612562415=>[1551, 2127, 5199], 394050141576=>[1554, 5026, 5712], 62190076347=>[1588, 2046, 2124], 87539319000=>[1670, 2280, 2550], 452965149000=>[1740, 3805, 5490], 208438080643=>[1782, 3768, 4174], 70796808000=>[1800, 2034, 3060], 116514833589=>[1837, 2508, 2805], 191450482496=>[1925, 2934, 4032], 448520612904=>[1984, 3096, 5484], 320465258659=>[1986, 2395, 5230], 151267943232=>[2004, 2736, 3060], 112422709000=>[2100, 2373, 3570], 330175414296=>[2166, 2943, 4294], 192323883843=>[2171, 2964, 3315], 292507980219=>[2214, 2964, 3978], 472233009528=>[2228, 2820, 5583], 240207891336=>[2338, 3192, 3570], 474894161469=>[2373, 2621, 5964], 167814656000=>[2400, 2712, 4080], 237565962991=>[2503, 3556, 4431], 295445201625=>[2505, 3420, 3825], 184877417088=>[2541, 3028, 3954], 358561050624=>[2672, 3648, 4080], 238939227000=>[2700, 3051, 4590], 360113256776=>[2818, 3970, 4801], 430080674247=>[2839, 3876, 4335], 327763000000=>[3000, 3390, 5100], 497520610776=>[3176, 4092, 4248], 436252553000=>[3300, 3729, 5610]}
[1493580092, 2510949380, 7071213244, 51114333631]
[11948640736, 20087595040, 56569705952, 408914669048]
{}

0 件のコメント:

コメントを投稿

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