2015年8月20日木曜日

150820

Ruby


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

大学への数学2000年10月号の≪宿題≫に
どの2つの和も平方数となるような異なる4個の整数の組を一つ求める
という趣旨の問題が出された。
今、
どの2つの和も平方数となるような異なる4個の自然数の組
を探してみる。

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

N = 10000
p N
(1..N - 3).each{|i|
  (i + 1..N - 2).each{|j|
    if square(i, j)
      (j + 1..N - 1).each{|k|
        if square(i, k)
          if square(j, k)
            (k + 1..N - 2).each{|l|
            if square(i, l)
              if square(j, l)
                if square(k, 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
      }
    end
  }
}

出力結果
10000
[[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]]
[[8, 953, 4088, 8456], [31, 64, 71, 92, 97, 112]]
[[8, 1016, 1288, 3473], [32, 36, 48, 59, 67, 69]]
[[18, 882, 2482, 4743], [30, 50, 58, 69, 75, 85]]
[[23, 1346, 4738, 8258], [37, 69, 78, 91, 98, 114]]
[[50, 2450, 4439, 8786], [50, 67, 83, 94, 106, 115]]
[[98, 863, 1346, 5378], [31, 38, 47, 74, 79, 82]]
[[98, 1346, 2018, 5378], [38, 46, 58, 74, 82, 86]]
[[135, 1890, 3586, 8514], [45, 61, 74, 93, 102, 110]]
[[162, 567, 1282, 4194], [27, 38, 43, 66, 69, 74]]
[[200, 1649, 5576, 9800], [43, 76, 85, 100, 107, 124]]
[[208, 576, 1728, 8073], [28, 44, 48, 91, 93, 99]]
[[224, 1712, 2912, 7697], [44, 56, 68, 89, 97, 103]]
[[305, 1376, 2720, 5024], [41, 55, 64, 73, 80, 88]]
[[338, 1106, 3383, 8498], [38, 61, 67, 94, 98, 109]]
[[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]]
[[722, 3122, 3767, 8114], [62, 67, 83, 94, 106, 109]]
[[792, 1512, 2457, 6952], [48, 57, 63, 88, 92, 97]]
[[1512, 3672, 5544, 9097], [72, 84, 96, 103, 113, 121]]

0 件のコメント:

コメントを投稿

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