2015年8月28日金曜日

150828

Ruby


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

次のコードで、どの2つの和も平方数となるような異なる5個の自然数の組
を探してみた。
(実行時間は約一日かかる。)

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

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

出力結果
1000000
[[7442, 28658, 148583, 177458, 763442], [190, 395, 430, 878, 421, 454, 890, 571, 955, 970]]
[[32018, 104882, 188882, 559343, 956018], [370, 470, 769, 994, 542, 815, 1030, 865, 1070, 1231]]

0 件のコメント:

コメントを投稿

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