Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > primeライブラリ > Primeクラス > each

instance method Prime#each

each(upper_bound = nil, generator = EratosthenesGenerator.new) {|prime| ... } -> object[permalink][rdoc]
each(upper_bound = nil, generator = EratosthenesGenerator.new) -> Enumerator

全ての素数を順番に与えられたブロックに渡して評価します。

[PARAM] upper_bound:
任意の正の整数を指定します。列挙の上界です。 nil が与えられた場合は無限に列挙し続けます。
[PARAM] generator:
素数生成器のインスタンスを指定します。
[RETURN]
ブロックの最後に評価された値を返します。ブロックが与えられなかった場合は、Enumerator と互換性のある外部イテレータを返します。

例:

require 'prime'
Prime.each(6).each{|prime| prime }  # => 5
Prime.each(7).each{|prime| prime }  # => 7
Prime.each(10).each{|prime| prime } # => 7
Prime.each(11).each{|prime| prime } # => 11

例: 30以下の双子素数

require 'prime'
Prime.each(30).each_cons(2).select{|p,r| r-p == 2}
  #=> [[3, 5], [5, 7], [11, 13], [17, 19]]

このメソッドに、真の素数列でない疑似素数を与えるべきではありません。

このメソッドは、素数列の外部イテレータを内部イテレータに変換してRubyらしいプログラミングを提供することが責務です。独自に素数性の保障するのはメソッドの責務ではありません。従って、次のように精度の低い素数生成器を与えると、真に素数とは限らない数列が発生します。

require 'prime'
Prime.each(50, Prime::Generator23.new) do |n|
  p n #=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49]
end

[SEE_ALSO] Prime.each, Prime::EratosthenesGenerator, Prime::TrialDivisionGenerator, Prime::Generator23