prime.diff

okkez (okkez _), 06/11/2009 01:55 pm

Download (11.9 kB)

b/refm/api/src/LIBRARIES
188 188
pp
189 189
prettyprint
190 190
#@end
191
#@since 1.9.1
192
prime
193
#@end
191 194
profile
192 195
#@since 1.8.0
193 196
profiler
b/refm/api/src/mathn.rd
39 39

  
40 40
  * [[ruby-list:1174]]
41 41

  
42
#@until 1.9.1
43
#@# see prime.rd
44

  
42 45
= reopen Integer
43 46

  
44 47
== Class Methods
......
79 82
  72.prime_division
80 83
  # => [[2, 3], [3, 2]]
81 84

  
85
#@end
86

  
82 87
= redefine Fixnum
83 88

  
84 89
== Instance Methods
......
142 147
それ以外の時、平方根が有理数であれば、Rational または Integer を返します。
143 148
無理数であれば、Float を返します。
144 149

  
150
#@until 1.9.1
151

  
145 152
= class Prime < Object
146 153

  
147 154
include Enumerable
......
184 191
  11
185 192
  13
186 193

  
187
#@since 1.9.1
188
--- primes
189
#@todo
190

  
191
それまでに求めた素数の配列を返します。
192 194
#@end
193 195

  
194 196
= reopen Rational
b/refm/api/src/prime.rd
1
#@since 1.9.1
2

  
3
素数や素因数分解を扱うライブラリです。
4

  
5
=== 例
6

  
7
  Prime.each(100) do |prime|
8
    p prime #=> 2, 3, 5, 7, 11, ..., 97
9
  end
10

  
11
= class Prime < Object
12
include Enumerable
13

  
14
全ての素数を表すクラスです。
15

  
16
=== インスタンスを取得する方法
17

  
18
[[m:Prime.new]] は非推奨です。[[m:Prime.instance]] を使用してください。
19

  
20
利便性のために [[c:Prime]] クラスのインスタンスメソッドはクラスメソッドとしても
21
アクセスすることができます。
22

  
23

  
24
例:
25
  Prime.instance.prime?(2)  #=> true
26
  Prime.prime?(2)           #=> true
27

  
28
=== 生成器
29

  
30
ジェネレータは擬似素数の列挙方法の実装を提供します。
31
またそれは、列挙状態や上限値を記憶します。
32
[[c:Enumerator]] と互換性のある外部イテレータでもあります。
33

  
34
[[c:Prime+::+PseudoPrimeGenerator]] はジェネレータのベースとなるクラスです。
35
ジェネレータの実装はいくつかあります。
36

  
37
: [[c:Prime+::EratosthenesGenerator]]
38
  エラトステネスの篩いを使用します。
39
: [[c:Prime+::TrialDivisionGenerator]]
40
  試行除算法を使用します。
41
: [[c:Prime+::Generator23]]
42
  2 と 3 で割り切れない全ての正の整数を生成します。
43
  この数列は素数の数列としては使い物になりません。しかし、他のジェネレータより速く、
44
  メモリの使用量も少ないという特徴があります。そのため、それほど大きくなくて、
45
  素数の要素を多く持つ整数の因数分解に向いています。
46

  
47
== Class Methods
48

  
49
--- each(upper_bound = nil, generator = EratosthenesGenerator.new){|prime| ... } -> object
50
--- each(upper_bound = nil, generator = EratosthenesGenerator.new)               -> object
51

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

  
54
[[m:Prime.new]] は Ruby 1.8 への互換性のために [[c:Prime::OldCompatibility]] を
55
[[Kernel.#extend]] したオブジェクトを返します。
56
このオブジェクトでは [[m:Prime#each]] は [[m:Prime::OldCompatibility#each]] によって再定義されています。
57

  
58
[[m:Prime.new]] は非推奨です。代わりに Prime.instance.each または単純に Prime.each を使用してください。
59

  
60
@param upper_bound 任意の正の整数を指定します。列挙の上限値です。
61
                   nil が与えられた場合は無限に列挙し続けます。
62

  
63
@param generator 素数ジェネレータのインスタンスを指定します。
64

  
65
@return ブロックの最後に評価された値を返します。
66
        ブロックが与えられなかった場合は、[[c:Enumerator]] と互換性のある外部イテレータを返します。
67

  
68
例:
69
  Prime.each(6).each{|prime| prime }  # => 5
70
  Prime.each(7).each{|prime| prime }  # => 7
71
  Prime.each(10).each{|prime| prime } # => 7
72
  Prime.each(11).each{|prime| prime } # => 11
73

  
74
@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
75

  
76
--- instance -> Prime
77

  
78
[[c:Prime]] のデフォルトのインスタンスを返します。
79

  
80
--- int_from_prime_division(pd) -> Integer
81
素因数分解された結果を元に戻します。
82

  
83
例えば、引数が [[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]] のように表せるとき、
84
結果は  p_1**e_1 * p_2**e_2 * .... * p_n**e_n のようになります。
85

  
86
@param pd 整数のペアの配列を指定します。含まれているペアの第一要素は素数で、
87
          第二要素はその素数の個数をあらわします。
88

  
89
例:
90
  Prime.int_from_prime_division([[2,2], [3,1]])  #=> 12
91
  Prime.int_from_prime_division([[2,2], [3,2]])  #=> 36
92

  
93

  
94
--- prime?(value, generator = Prime::Generator23.new) -> bool
95

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

  
99
@param value 素数かどうかチェックする任意の整数を指定します。
100

  
101
@param generator 素数ジェネレータのインスタンスを指定します。
102

  
103
@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
104

  
105
--- prime_division(value, generator= Prime::Generator23.new) -> Array
106

  
107
与えられた整数を素因数分解した結果を返します。
108

  
109
@param value 素因数分解する任意の整数を指定します。
110

  
111
@param generator 素数ジェネレータのインスタンスを指定します。
112

  
113
@raise ZeroDivisionError 与えられた数値がゼロである場合に発生します。
114

  
115
例:
116
    Prime.prime_division(12) #=> [[2,2], [3,1]]
117
    Prime.prime_division(10) #=> [[2,1], [5,1]]
118

  
119
@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
120

  
121
== Instance Methods
122

  
123
--- each(upper_bound = nil, generator = EratosthenesGenerator.new){|prime| ... } -> object
124
--- each(upper_bound = nil, generator = EratosthenesGenerator.new)               -> object
125

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

  
128
[[m:Prime.new]] は Ruby 1.8 への互換性のために [[c:Prime::OldCompatibility]] を
129
[[Kernel.#extend]] したオブジェクトを返します。
130
このオブジェクトでは [[m:Prime#each]] は [[m:Prime::OldCompatibility#each]] によって再定義されています。
131

  
132
[[m:Prime.new]] は非推奨です。代わりに Prime.instance.each または単純に Prime.each を使用してください。
133

  
134
@param upper_bound 任意の正の整数を指定します。列挙の上限値です。
135
                   nil が与えられた場合は無限に列挙し続けます。
136

  
137
@param generator 素数ジェネレータのインスタンスを指定します。
138

  
139
@return ブロックの最後に評価された値を返します。
140
        ブロックが与えられなかった場合は、[[c:Enumerator]] と互換性のある外部イテレータを返します。
141

  
142
例:
143
  Prime.instance.each(6).each{|prime| prime }  # => 5
144
  Prime.instance.each(7).each{|prime| prime }  # => 7
145
  Prime.instance.each(10).each{|prime| prime } # => 7
146
  Prime.instance.each(11).each{|prime| prime } # => 11
147

  
148
@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
149

  
150
--- int_from_prime_division -> Integer
151
素因数分解された結果を元に戻します。
152

  
153
例えば、引数が [[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]] のように表せるとき、
154
結果は  p_1**e_1 * p_2**e_2 * .... * p_n**e_n のようになります。
155

  
156
@param pd 整数のペアの配列を指定します。含まれているペアの第一要素は素数で、
157
          第二要素はその素数の個数をあらわします。
158

  
159
例:
160
  Prime.instance.int_from_prime_division([[2,2], [3,1]])  #=> 12
161
  Prime.instance.int_from_prime_division([[2,2], [3,2]])  #=> 36
162

  
163
--- prime? -> bool
164

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

  
168
@param value 素数かどうかチェックする任意の整数を指定します。
169

  
170
@param generator 素数ジェネレータのインスタンスを指定します。
171

  
172
@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
173

  
174
--- prime_division -> Array
175

  
176
与えられた整数を素因数分解した結果を返します。
177

  
178
@param value 素因数分解する任意の整数を指定します。
179

  
180
@param generator 素数ジェネレータのインスタンスを指定します。
181

  
182
@raise ZeroDivisionError 与えられた数値がゼロである場合に発生します。
183

  
184
例:
185
    Prime.instance.prime_division(12) #=> [[2,2], [3,1]]
186
    Prime.instance.prime_division(10) #=> [[2,1], [5,1]]
187

  
188
@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
189

  
190
= class Prime::PseudoPrimeGenerator < Object
191
include Enumerable
192

  
193
擬似素数を列挙するための抽象クラスです。
194

  
195
このクラスを継承する具象クラスは succ, next, rewind を定義しなければなりません。
196

  
197
== Class Methods
198

  
199
--- new(upper_bound = nil)
200

  
201
自身を初期化します。
202

  
203
@param upper_bound 上限を指定します。
204

  
205
== Instance Methods
206

  
207
--- each {|prime| ... } -> object
208
--- each -> self
209

  
210
素数を与えられたブロックに渡して評価します。
211

  
212
--- next -> ()
213
--- succ -> ()
214

  
215
次の擬似素数を返します。
216
また内部的な位置を進めます。
217

  
218
サブクラスで実装してください。
219

  
220
@raise NotImplementedError 必ず発生します。
221

  
222
--- rewind -> ()
223

  
224
列挙状態を巻き戻します。
225

  
226
サブクラスで実装してください。
227

  
228
@raise NotImplementedError 必ず発生します。
229

  
230
@see [[m:Enumerator#rewind]]
231

  
232
--- upper_bound -> Integer
233

  
234
現在の上限を返します。
235

  
236
--- upper_bound=(upper_bound)
237

  
238
新しい上限をセットします。
239

  
240
@param upper_bound 新しい上限を指定します。
241

  
242
--- with_index{|prime, index| ... }      -> self
243
--- each_with_index{|prime, index| ... } -> self
244
--- with_index      -> Enumerator
245
--- each_with_index -> Enumerator
246

  
247
素数とそのインデックスを与えられたブロックに渡して評価します。
248

  
249
例:
250
  Prime::EratosthenesGenerator.new(10).each_with_index do |prime, index|
251
    p [prime, index]
252
  end
253
  # [2, 0]
254
  # [3, 1]
255
  # [5, 2]
256
  # [7, 3]
257

  
258
@see [[m:Enumerator#with_index]]
259

  
260
--- with_object(obj){|prime, obj| ... } -> object
261
#@todo
262

  
263
与えられた任意のオブジェクトと要素をブロックに渡して評価します。
264
最初に与えられたオブジェクトを返します。
265

  
266
@param obj 任意のオブジェクトを指定します。
267

  
268
@see [[m:Enumerator#with_object]]
269

  
270
= class Prime::EratosthenesGenerator < PseudoPrimeGenerator
271

  
272
[[c:PseudoPrimeGenerator]] の具象クラスです。
273
素数の生成にエラトステネスのふるいを使用しています。
274

  
275
== Instance Methods
276

  
277
--- next -> Integer
278
--- succ -> Integer
279

  
280
次の素数を返します。
281
また内部的な位置を進めます。
282

  
283
--- rewind -> nil
284

  
285
列挙状態を巻き戻します。
286

  
287
= class Prime::TrialDivisionGenerator < PseudoPrimeGenerator
288

  
289
[[c:PseudoPrimeGenerator]] の具象クラスです。
290
素数の生成に試行除算法を使用しています。
291

  
292
== Instance Methods
293

  
294
--- next -> Integer
295
--- succ -> Integer
296

  
297
次の素数を返します。
298
また内部的な位置を進めます。
299

  
300
--- rewind -> nil
301

  
302
列挙状態を巻き戻します。
303

  
304
= class Prime::Generator23 < PseudoPrimeGenerator
305

  
306
2 より大きくて 2 と 3 で割り切れない全ての整数を生成します。
307

  
308
これはある整数の素数性を総当たりでチェックするのに適した擬似素数のジェネレータです。
309

  
310
== Instance Methods
311

  
312
--- next -> Integer
313
--- succ -> Integer
314

  
315
次の素数を返します。
316
また内部的な位置を進めます。
317

  
318
--- rewind -> nil
319

  
320
列挙状態を巻き戻します。
321

  
322

  
323
#@# = class Prime::EratosthenesSieve < Object
324
#@# internal use
325

  
326
#@# = class Prime::TrialDivision < Object
327
#@# internal use
328

  
329

  
330
= module Prime::OldCompatibility
331

  
332
Ruby1.8 との互換性のためのモジュールです。
333

  
334
[[m:Prime.new]] が呼び出されたときに有効になります。
335

  
336
== Instance Methods
337

  
338
--- next -> Integer
339
--- succ -> Integer
340

  
341
次の素数を返します。
342

  
343
--- each{|prime| ... } -> object
344
--- each               -> object
345

  
346
[[m:Prime#each]] を再定義します。
347

  
348
全ての素数を列挙し、それぞれの素数をブロックに渡して評価します。
349
無限ループになるので必ず break を入れてください。
350

  
351
呼び出される度に列挙状態が巻き戻されることはありません。
352

  
353
@return ブロック付きで呼び出された場合は break の引数が返り値になります。
354
        ブロック無しで呼び出された場合は [[c:Prime::EratosthenesGenerator]] のインスタンスを返します。
355

  
356

  
357
= reopen Integer
358

  
359
== Class Methods
360

  
361
--- from_prime_division(pd) -> Integer
362

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

  
365
@param pd 整数のペアの配列を指定します。
366

  
367
@see [[m:Prime#from_prime_division]]
368

  
369
--- each_prime(upper_bound){|prime| ... } -> object
370
--- each_prime(upper_bound) -> object
371

  
372
全ての素数を列挙し、それぞれの素数をブロックに渡して評価します。
373

  
374
@param upper_bound 上限値を指定します。nil を指定すると全ての素数を列挙します。
375

  
376
@see [[m:Prime#each]]
377

  
378
== Instance Methods
379

  
380
--- prime_division(generator = Prime::Generator23.new) -> Array
381

  
382
自身を素因数分解した結果を返します。
383

  
384
@param generator 素数ジェネレータのインスタンスを指定します。
385

  
386
@see [[m:Prime#prime_division]]
387

  
388
--- prime? -> bool
389

  
390
自身が素数である場合、真を返します。
391
そうでない場合は偽を返します。
392

  
393
例:
394

  
395
  1.prime? # => false
396
  2.prime? # => true
397

  
398
@see [[m:Prime#prime?]]
399

  
400
#@end