どの2つの和も平方数(4)
を探してみた。
(実行時間は約一日かかる。)
# 二つの和が平方数か?
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
}
}
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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。