Ruby
160319(1) 分について、らすかる氏の指摘により
もう少し調べる範囲を少なくできることがわかった。
同じ型6つ、もしくは同じ型5つと3、の2パターンのうち
後者については
後者については
12N+7型5つと3、12N+11型5つと3
しかないということが簡単にわかる。
この考え方をもとに以下のように改良した。
require 'prime'
def test(ary)
ary.combination(2){|c|
return false if !((c[0] + c[1]) / 2).prime?
}
true
end
def search(k, n)
ary = Prime.each(n).to_a - [2, 3]
ary1 = ary.select{|i| i % 12 == 1}
ary5 = ary.select{|i| i % 12 == 5}
ary7 = ary.select{|i| i % 12 == 7}
ary11 = ary.select{|i| i % 12 == 11}
ans = []
[ary1, ary5, [3] + ary7, [3] + ary11].each{|a|
a.combination(k){|c| ans << c if test(c)}
}
ans
end
p search(4, 100)
p search(5, 200)
p search(6, 400)
出力結果
[[5, 17, 29, 89], [5, 29, 53, 89], [3, 11, 23, 71], [3, 11, 23, 83], [3, 23, 59, 83]]
[[5, 29, 53, 89, 113], [5, 29, 53, 89, 173], [3, 11, 23, 71, 191], [3, 11, 23, 83, 191]]
[[3, 11, 83, 131, 251, 383]]
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。