要約
素数や素因数分解を扱うライブラリです。
ライブラリの中心にあるのは Prime クラスで、これは素数全体を表すシングルトンです。また、素数性と素因数分解に関するメソッドを Integer に追加します。さらに、 Prime クラスの機能を実現するための低水準のクラスも幾つか提供されています。
require 'prime'
Prime.each(100) do |prime|
p prime #=> 2, 3, 5, 7, 11, ..., 97
end
2.prime? #=> true
4.prime? #=> false
生成器
Prime のメソッドは内部で低水準の擬似素数生成器を使用します。生成器は擬似素数の列挙方法の実装を提供します。また列挙状態や列挙の上界を記憶する機能もあります。更に、 Enumerator と互換性のある外部イテレータでもあります。
状況に応じて適切な擬似素数生成アルゴリズムは異なるので、いくつかの生成器の実装が用意されています。 Prime::PseudoPrimeGenerator は生成器の基底となるクラスです。
- Prime::EratosthenesGenerator
-
エラトステネスの篩いを使用します。
- Prime::TrialDivisionGenerator
-
試行除算法を使用します。
- Prime::Generator23
-
2 と 3 で割り切れない全ての正の整数を生成します。この数列は素数の数列としては使い物になりません。しかし、他の生成器より速く、メモリの使用量も少ないという特徴があります。そのため、それほど大きくなくて、素数の要素を多く持つ整数の因数分解に向いています。
Prime クラスの各メソッドは、一般的な用途を想定して適切な生成器を使用します。ユーザーは必要に応じて特定の生成器実装を使用するようにオプション引数を設定することもできます。また、ユーザーは独自の生成器を実装することもできます。
クラス
Prime | 素数全体を表します。 |
Prime::PseudoPrimeGenerator | 擬似素数列の列挙子のための抽象クラスです。 |
Prime::EratosthenesGenerator | Prime::PseudoPrimeGenerator の具象クラスです。素数の生成にエラトステネスのふるいを使用しています。 |
Prime::Generator23 | 2と3と、3 より大きくて 2 でも 3 でも割り切れない全ての整数を生成します。 |
Prime::TrialDivisionGenerator | Prime::PseudoPrimeGenerator の具象クラスです。素数の生成に試行除算法を使用しています。 |
同時にrequireされるライブラリ
forwardable | クラスやオブジェクトに、メソッドの委譲機能を追加するためのライブラリです。 |
singleton | Singleton パターンを扱うためのライブラリです。 |
追加・再定義されるメソッド
Integer#prime?
Integer#prime_division
Integer.each_prime
Integer.from_prime_division