class Prime

[edit]

要約

素数全体を表します。

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

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

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



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

目次

特異メソッド
インスタンスメソッド

継承しているメソッド

Enumerableから継承しているメソッド
Singletonから継承しているメソッド

特異メソッド

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

Prime.instance.each と同じです。

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

[SEE_ALSO] Prime#each

instance -> Prime[permalink][rdoc][edit]

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

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

Prime.instance.int_from_prime_division と同じです。

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

[SEE_ALSO] Prime#int_from_prime_division

prime?(value, generator = Prime::Generator23.new) -> bool[permalink][rdoc][edit]

Prime.instance.prime? と同じです。

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

[SEE_ALSO] Prime#prime?

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

Prime.instance.prime_division と同じです。

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

[SEE_ALSO] Prime#prime_division

インスタンスメソッド

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

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

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


require 'prime'
Prime.each(6){|prime| prime }  # => 5
Prime.each(7){|prime| prime }  # => 7
Prime.each(10){|prime| prime } # => 7
Prime.each(11){|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

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

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

引数が [[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:
整数のペアの配列を指定します。含まれているペアの第一要素は素因数を、第二要素はその素因数の指数をあらわします。


require 'prime'
Prime.int_from_prime_division([[2,2], [3,1]])  #=> 12
Prime.int_from_prime_division([[2,2], [3,2]])  #=> 36

[SEE_ALSO] Prime.int_from_prime_division

prime?(value, generator = Prime::Generator23.new) -> bool[permalink][rdoc][edit]

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

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

[SEE_ALSO] Prime.prime?, Prime::EratosthenesGenerator, Prime::TrialDivisionGenerator, Prime::Generator23

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

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

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


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

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