2015年8月21日金曜日

150821

Ruby


どの2つの和も平方数(2)

少し工夫し速くしてみた。

# 二つの和が平方数か?
def square(y, z)
  a = y + z
  b = Math.sqrt(a).to_i
  a == b * b
end

N = 20000
p N
# 和の候補となる平方数
s_ary = (2..Math.sqrt(2 * N - 1).to_i).map{|i| i * i}
# i < j < k < lの大小関係がある
(1..N - 3).each{|i|
  # a = i + j
  s_ary.each{|a|
    j = a - i
    if j > i && j <= N - 2
      # b = j + k
      s_ary.each{|b|
        k = b - j
        if k > j && k <= N - 1
          if square(i, k)
            # c = k + l
            s_ary.each{|c|
              l = c - k
              if l > k && l <= N
                if square(i, l) && square(j, l)
                  p [[i, j, k, l], [i + j, i + k, i + l, j + k, j + l, k + l].map{|i| Math.sqrt(i).to_i}.sort]
                end
              end
            }
          end
        end
      }
    end
  }
}

出力結果
20000
[[2, 167, 674, 6722], [13, 26, 29, 82, 83, 86]]
[[2, 359, 482, 3362], [19, 22, 29, 58, 61, 62]]
[[2, 1022, 2114, 6722], [32, 46, 56, 82, 88, 94]]
[[2, 1442, 4487, 7394], [38, 67, 77, 86, 94, 109]]
[[2, 2114, 6722, 16382], [46, 82, 94, 128, 136, 152]]
[[8, 953, 4088, 8456], [31, 64, 71, 92, 97, 112]]
[[8, 1016, 1288, 3473], [32, 36, 48, 59, 67, 69]]
[[8, 1436, 1928, 13448], [38, 44, 58, 116, 122, 124]]
[[18, 882, 2482, 4743], [30, 50, 58, 69, 75, 85]]
[[18, 1138, 2583, 19026], [34, 51, 61, 138, 142, 147]]
[[18, 5607, 8082, 12082], [75, 90, 110, 117, 133, 142]]
[[23, 1346, 4738, 8258], [37, 69, 78, 91, 98, 114]]
[[32, 1568, 8432, 15593], [40, 92, 100, 125, 131, 155]]
[[32, 4064, 5152, 13892], [64, 72, 96, 118, 134, 138]]
[[50, 1106, 7175, 16850], [34, 85, 91, 130, 134, 155]]
[[50, 2450, 4439, 8786], [50, 67, 83, 94, 106, 115]]
[[72, 3528, 9928, 18972], [60, 100, 116, 138, 150, 170]]
[[98, 743, 3746, 11138], [29, 62, 67, 106, 109, 122]]
[[98, 863, 1346, 5378], [31, 38, 47, 74, 79, 82]]
[[98, 1346, 2018, 5378], [38, 46, 58, 74, 82, 86]]
[[98, 4943, 13826, 17858], [71, 118, 134, 137, 151, 178]]
[[98, 5378, 11783, 14786], [74, 109, 122, 131, 142, 163]]
[[110, 674, 1826, 19490], [28, 44, 50, 140, 142, 146]]
[[113, 728, 3368, 10088], [29, 59, 64, 101, 104, 116]]
[[135, 1890, 3586, 8514], [45, 61, 74, 93, 102, 110]]
[[135, 3346, 5490, 13554], [59, 75, 94, 117, 130, 138]]
[[137, 1712, 6752, 11744], [43, 83, 92, 109, 116, 136]]
[[143, 386, 1378, 14498], [23, 39, 42, 121, 122, 126]]
[[144, 3456, 6745, 17280], [60, 83, 101, 132, 144, 155]]
[[151, 3330, 7074, 19170], [59, 85, 102, 139, 150, 162]]
[[162, 567, 1282, 4194], [27, 38, 43, 66, 69, 74]]
[[176, 1120, 2849, 13280], [36, 55, 63, 116, 120, 127]]
[[194, 4706, 6530, 17495], [70, 82, 106, 133, 149, 155]]
[[200, 1649, 5576, 9800], [43, 76, 85, 100, 107, 124]]
[[200, 4424, 7025, 15176], [68, 85, 107, 124, 140, 149]]
[[208, 576, 1728, 8073], [28, 44, 48, 91, 93, 99]]
[[208, 1088, 1313, 11456], [36, 39, 49, 108, 112, 113]]
[[224, 1072, 2177, 10592], [36, 49, 57, 104, 108, 113]]
[[224, 1712, 2912, 7697], [44, 56, 68, 89, 97, 103]]
[[248, 1352, 7673, 18248], [40, 89, 95, 136, 140, 161]]
[[287, 2114, 9122, 15842], [49, 97, 106, 127, 134, 158]]
[[288, 3312, 9913, 14112], [60, 101, 115, 120, 132, 155]]
[[296, 545, 1304, 15080], [29, 40, 43, 124, 125, 128]]
[[296, 1073, 2408, 16088], [37, 52, 59, 128, 131, 136]]
[[296, 1640, 6104, 11585], [44, 80, 88, 109, 115, 133]]
[[297, 2728, 3672, 10728], [55, 63, 80, 105, 116, 120]]
[[305, 1376, 2720, 5024], [41, 55, 64, 73, 80, 88]]
[[338, 1106, 3383, 8498], [38, 61, 67, 94, 98, 109]]
[[351, 6210, 8674, 16290], [81, 95, 122, 129, 150, 158]]
[[386, 2114, 3970, 10430], [50, 66, 78, 104, 112, 120]]
[[392, 2009, 4232, 12152], [49, 68, 79, 112, 119, 128]]
[[392, 8072, 10424, 12377], [92, 104, 113, 136, 143, 151]]
[[401, 2624, 5840, 13760], [55, 79, 92, 119, 128, 140]]
[[407, 3314, 4082, 5522], [61, 67, 77, 86, 94, 98]]
[[450, 2466, 3775, 5634], [54, 65, 78, 79, 90, 97]]
[[513, 1008, 1696, 6048], [39, 47, 52, 81, 84, 88]]
[[527, 1682, 5714, 12242], [47, 79, 86, 113, 118, 134]]
[[560, 3161, 4064, 19040], [61, 68, 85, 140, 149, 152]]
[[584, 2552, 5192, 13577], [56, 76, 88, 119, 127, 137]]
[[585, 1440, 6304, 19296], [45, 83, 88, 141, 144, 160]]
[[590, 4594, 5810, 17906], [72, 80, 102, 136, 150, 154]]
[[648, 2268, 5128, 16776], [54, 76, 86, 132, 138, 148]]
[[704, 6185, 7040, 13696], [83, 88, 115, 120, 141, 144]]
[[722, 3122, 3767, 8114], [62, 67, 83, 94, 106, 109]]
[[722, 4607, 6002, 14162], [73, 82, 103, 122, 137, 142]]
[[722, 5362, 10514, 18047], [78, 106, 126, 137, 153, 169]]
[[743, 3746, 11138, 16418], [67, 109, 122, 131, 142, 166]]
[[791, 3970, 6434, 18530], [69, 85, 102, 139, 150, 158]]
[[792, 1512, 2457, 6952], [48, 57, 63, 88, 92, 97]]
[[818, 3026, 6578, 17138], [62, 86, 98, 134, 142, 154]]
[[848, 1553, 3776, 12608], [49, 68, 73, 116, 119, 128]]
[[848, 1856, 2633, 14528], [52, 59, 67, 124, 128, 131]]
[[855, 2626, 4770, 14274], [59, 75, 86, 123, 130, 138]]
[[872, 1432, 3752, 18449], [48, 68, 72, 139, 141, 149]]
[[872, 6872, 11897, 18728], [88, 113, 137, 140, 160, 175]]
[[878, 2258, 3218, 11666], [56, 64, 74, 112, 118, 122]]
[[1010, 3890, 5714, 18311], [70, 82, 98, 139, 149, 155]]
[[1058, 6338, 10823, 13826], [86, 109, 122, 131, 142, 157]]
[[1250, 10850, 16706, 19775], [110, 134, 145, 166, 175, 191]]
[[1337, 3992, 5224, 19112], [73, 81, 96, 143, 152, 156]]
[[1345, 5544, 8856, 11880], [83, 101, 115, 120, 132, 144]]
[[1463, 2258, 4466, 15698], [61, 77, 82, 131, 134, 142]]
[[1512, 3672, 5544, 9097], [72, 84, 96, 103, 113, 121]]
[[1634, 3266, 7970, 16055], [70, 98, 106, 133, 139, 155]]
[[1640, 6281, 8360, 14744], [89, 100, 121, 128, 145, 152]]
[[1817, 7592, 8792, 14312], [97, 103, 127, 128, 148, 152]]
[[1856, 2768, 3473, 10688], [68, 73, 79, 112, 116, 119]]
[[2216, 4673, 5528, 15208], [83, 88, 101, 132, 141, 144]]
[[2360, 5384, 7841, 12040], [88, 101, 115, 120, 132, 141]]
[[2384, 6080, 13241, 19520], [92, 125, 139, 148, 160, 181]]
[[2402, 5342, 7202, 17762], [88, 98, 112, 142, 152, 158]]
[[2402, 6434, 11522, 16367], [94, 118, 134, 137, 151, 167]]
[[2408, 10136, 12968, 19793], [112, 124, 149, 152, 173, 181]]
[[2546, 4178, 7058, 15143], [82, 98, 106, 133, 139, 149]]
[[3456, 6745, 10944, 17280], [101, 120, 133, 144, 155, 168]]
[[4610, 13346, 15554, 19415], [134, 142, 155, 170, 181, 187]]

0 件のコメント:

コメントを投稿

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