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

class Prime

クラスの継承リスト: Prime < Enumerable < Object < Kernel < BasicObject

要約

素数全体を表します。

インスタンスを取得する方法

Prime クラスはシングルトンであると考えてください。Prime クラスはデフォルトのインスタンスを持っており、ユーザーはそのインスタンスを利用すべきです。 Prime.instance によってそのインスタンスを取得できます。

過去との互換性のために Prime.new も残っています。このメソッドは非推奨ですので、新しいプログラムでは利用しないでください。

なお、利便性のためにデフォルトインスタンスのメソッドをクラスメソッドとしても利用できます。

例:

Prime.instance.prime?(2)  #=> true
Prime.prime?(2)           #=> true

目次

特異メソッド
instance new
インスタンスメソッド
each int_from_prime_division prime? prime_division

特異メソッド

instance -> Prime[permalink][rdoc]

Prime のデフォルトのインスタンスを返します。

new -> Prime[permalink][rdoc]

過去との互換性のためのメソッドです。新しいプログラムでは Prime.instance やクラスメソッドを利用してください。

このメソッドが返すインスタンスは、デフォルトのインスタンスとは違ってPrime::OldCompatibility で拡張されています。

インスタンスメソッド

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 と互換性のある外部イテレータを返します。

例:

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以下の双子素数

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

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

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

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::EratosthenesGenerator, Prime::TrialDivisionGenerator, Prime::Generator23

int_from_prime_division(pd) -> Integer[permalink][rdoc]

素因数分解された結果を元の数値に戻します。

引数が [[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]] のようであるとき、 結果は p_1**e_1 * p_2**e_2 * .... * p_n**e_n となります。

[PARAM] pd:
整数のペアの配列を指定します。含まれているペアの第一要素は素因数を、 第二要素はその素因数の指数をあらわします。

例:

Prime.int_from_prime_division([[2,2], [3,1]])  #=> 12
Prime.int_from_prime_division([[2,2], [3,2]])  #=> 36
prime?(value, generator = Prime::Generator23.new) -> bool[permalink][rdoc]

与えられた整数が素数である場合は、真を返します。 そうでない場合は偽を返します。

[PARAM] value:
素数かどうかチェックする任意の整数を指定します。
[PARAM] generator:
素数生成器のインスタンスを指定します。
[RETURN]
素数かどうかを返します。

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

prime_division(value, generator= Prime::Generator23.new) -> [[Integer, Integer]][permalink][rdoc]

与えられた整数を素因数分解します。

[PARAM] value:
素因数分解する任意の整数を指定します。
[PARAM] generator:
素数生成器のインスタンスを指定します。
[RETURN]
素因数とその指数から成るペアを要素とする配列です。つまり、戻り値の各要素は2要素の配列 [n,e] であり、それぞれの内部配列の第1要素 n は value の素因数、第2要素は n**e が value を割り切る最大の自然数 e です。
[EXCEPTION] ZeroDivisionError:
与えられた数値がゼロである場合に発生します。

例:

Prime.prime_division(12) #=> [[2,2], [3,1]]
Prime.prime_division(10) #=> [[2,1], [5,1]]

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