prime_miller_rabin 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3e71f504ac581df53a4de144d38753737de8ee32
4
- data.tar.gz: 8a0341da7bfc0d88b5c37f51cb5bac7d2db7989b
2
+ SHA256:
3
+ metadata.gz: 370adffee7ec8bd59772367385f369ccbe4a399ff9385ce8e01f6482d6172ae7
4
+ data.tar.gz: b27039c007ba06f4d7eeb5504114a275370b8b9f32de5341902473a31259aae0
5
5
  SHA512:
6
- metadata.gz: e819edba359c4e40db5e8277430a5ee4ebc1f68b59690bdd98ad89f55813f7ddfaeef2a3c12d5fdcf7608b65ac15d1186ade0df8823dca76bbce3b7a8e1aea14
7
- data.tar.gz: 01754969f833ebf1dac2cc3935551f7536b26997141ae028c0021fe318baaecf79161474d91dbcbcea220ae55d79482ee129abe9c678895a7e337490badeeb5e
6
+ metadata.gz: ab6d6c51cee70972173ab3ef9c9ef07323bfa39c6ffc25e53341d2f6d952848c016d74d00c72cbda5617cafc78de44ecd67de5525c78e83f002891a2954a09cb
7
+ data.tar.gz: 9e2bb05e9d95c148da51d3a46f4df012e968eb16b2c418ceb91941c950c4f73558298063d6f71fd1e7e533c727819cc619390c825e48cd97da7d36a83a43ab6e
data/README.md CHANGED
@@ -14,216 +14,154 @@ and
14
14
 
15
15
  The following code was used to compare Miller-Rabin with the existing Ruby Prime Generators:
16
16
 
17
- Prime::MillerRabin.speed_intercept
18
-
19
- miller_rabin = Prime::MillerRabin.new
20
- generator23 = Prime::Generator23.new
21
- eratosthenes = Prime::EratosthenesGenerator.new
22
- trial_division = Prime::TrialDivisionGenerator.new
23
-
24
- generators = [miller_rabin, generator23, eratosthenes, trial_division]
25
- generator_names = ['MillerRabin', 'Generator23', 'Eratosthenes', 'TrialDivision']
26
-
27
- puts(("%-15s" * generator_names.size) % generator_names + " Number Tested")
28
- primes.each_with_index do |number|
29
- remove = []
30
- timings = []
31
- generators.each_with_index do |generator, j|
32
- if generator
33
- name = generator_names[j]
34
- benchmark = Benchmark.measure { Prime.prime?(number, generator) }
35
- if benchmark.total > 120
36
- puts "Removing #{name} as it is now exceeding 2 minutes to determine primality"
37
- remove << generator
17
+ require 'prime_miller_rabin'
18
+ require 'benchmark'
19
+
20
+ primes = load_primes() # Load primes from an external source
21
+
22
+ Prime::MillerRabin.speed_intercept
23
+
24
+ generators = {
25
+ MillerRabin: Prime::MillerRabin.new,
26
+ Generator23: Prime::Generator23.new,
27
+ Eratosthenes: Prime::EratosthenesGenerator.new,
28
+ TrialDivision: Prime::TrialDivisionGenerator.new
29
+ }
30
+
31
+ padding = ''
32
+ column_width = generators.keys.map(&:size).max
33
+ puts(generators.keys.map { |name| '%-*s' % [column_width, name] }.join('') + ' Number Tested')
34
+
35
+ time_limit = 120
36
+
37
+ primes.each_with_index do |number|
38
+ timings = generators.map { |name, generator| [name, Benchmark.measure { Prime.prime?(number, generator) }.total] }.to_h
39
+ puts timings.values.map { |x| '%-*.6f' % [column_width, x] }.push(padding).push(number).join(' ')
40
+ generators = generators.delete_if do |name, _|
41
+ if timings[name] > time_limit
42
+ puts "Removing #{name} as it is now exceeding #{time_limit / 60} minutes to determine primality."
43
+ padding += ' ' * (column_width + 1)
38
44
  end
39
- timings << benchmark.total
40
- else
41
- timings << nil
42
45
  end
43
46
  end
44
- timings.map! { |x| x ? '%-15.6f' % [x] : '%15s' % [' '] }
45
- timings << number
46
- puts timings.join(' ')
47
- generators.map! { |x| remove.include?(x) ? nil : x }
48
- end
49
-
50
- ####The results (formatted for readability):
51
- MillerRabin Generator23 Eratosthenes TrialDivision Number Tested
52
- 0.000000 0.000000 0.000000 0.000000 2
53
- 0.000000 0.000000 0.000000 0.000000 7
54
- 0.000000 0.000000 0.000000 0.000000 67
55
- 0.000000 0.000000 0.000000 0.000000 619
56
- 0.000000 0.000000 0.000000 0.000000 6197
57
- 0.000000 0.000000 0.000000 0.000000 61813
58
- 0.000000 0.000000 0.000000 0.000000 618041
59
- 0.000000 0.000000 0.010000 0.000000 6180341
60
- 0.000000 0.000000 0.000000 0.010000 61803419
61
- 0.000000 0.000000 0.020000 0.030000 618034003
62
- 0.000000 0.010000 0.050000 0.120000 6180339923
63
- 0.000000 0.040000 0.220000 1.690000 61803398903
64
- 0.000000 0.140000 0.990000 13.080000 618033988751
65
- 0.010000 0.390000 4.110000 119.750000 6180339887543
66
- Removing TrialDivision as it is now exceeding 2 minutes to determine primality
67
- 0.000000 1.820000 30.460000 1081.650000 61803398875019
68
- Removing Eratosthenes as it is now exceeding 2 minutes to determine primality
69
- 0.000000 7.180000 139.250000 618033988749911
70
- 0.010000 16.990000 6180339887498971
71
- 0.000000 53.850000 61803398874989489
72
- Removing Generator23 as it is now exceeding 2 minutes to determine primality
73
- 0.010000 170.560000 618033988749894811
74
-
75
- MillerRabin Number Tested
76
- 0.000000 6180339887498948681
77
- 0.000000 61803398874989486159
78
- 0.000000 618033988749894877249
79
- 0.000000 6180339887498948771861
80
- 0.020000 61803398874989479329793
81
- 0.000000 618033988749894843629693
82
- 0.010000 6180339887498948973166649
83
- 0.000000 61803398874989485436698673
84
- 0.000000 618033988749894820007248007
85
- 0.020000 6180339887498948474950385857
86
- 0.000000 61803398874989473754387579003
87
- 0.000000 618033988749894825504806010893
88
- 0.010000 6180339887498947551360618332249
89
- 0.020000 61803398874989482269005624377351
90
- 0.000000 618033988749894786661259224809529
91
- 0.010000 6180339887498948010727780323950599
92
- 0.020000 61803398874989484718963821666894041
93
- 0.000000 618033988749894884083126364088041501
94
- 0.010000 6180339887498948102961500692498350149
95
- 0.020000 61803398874989478668431765490160893959
96
- 0.000000 618033988749894805573783586380189794451
97
- 0.010000 6180339887498948055737835863801897943079
98
- 0.020000 61803398874989485393081637096535678255353
99
- 0.010000 618033988749894834588003257131289987252251
100
- 0.000000 6180339887498947881652517839295296785350671
101
- 0.020000 61803398874989486244165414105234617248252037
102
- 0.010000 618033988749894783213491626788008578938568879
103
- 0.020000 6180339887498948782872866439052136911913091139
104
- 0.010000 61803398874989490364029864846980172112537321529
105
- 0.020000 618033988749894863075479441166460873230870642701
106
- 0.010000 6180339887498948306236240753237881949152685850683
107
- 0.020000 61803398874989488254659266067206448022023187726371
108
- 0.010000 618033988749894861777405226532753966098246560383039
109
- 0.020000 6180339887498948285467053319098571435030700533743709
110
- 0.010000 61803398874989477537758550051322222735078764216058197
111
- 0.030000 618033988749894860448177230747838093194439500102631463
112
- 0.000000 6180339887498948264199405386539917468569787569258103079
113
- 0.030000 61803398874989493531029795335430005513685313509163794507
114
- 0.010000 618033988749894848198012021594053408512953632558975811599
115
- 0.020000 6180339887498947959306404625379054205386139310393785319457
116
- 0.010000 61803398874989483774453770978282381091808569225505635565881
117
- 0.030000 618033988749894815443792511252200669382367419606694849675361
118
- 0.020000 6180339887498947619220040347787051296966435652506272353222859
119
- 0.010000 61803398874989487610181945125549561435952112121023814594199579
120
- 0.030000 618033988749894876101819451255495614359521121210238145941995523
121
- 0.030000 6180339887498948212955080513466361817213398943496249088445251857
122
- 0.010000 61803398874989482129550805134663618172133989434962490884452515863
123
- 0.030000 618033988749894751143429459463296107944467923968039965359763095659
124
- 0.020000 6180339887498948446795342486410828729802972178101532233394458460333
125
- 0.020000 61803398874989478481642718356729934335736646975120073823244888571933
126
- 0.030000 618033988749894856652155661655839578904883367421943720360845238075493
127
- 0.030000 6180339887498948949645441833030610378635590461796733108293232926654757
128
- 0.010000 61803398874989480301481173134972953636273741716112229370497596164931657
129
- 0.030000 618033988749894753974954423641286068895632548351228417905324051774046223
130
- 0.030000 6180339887498948520546690390581730038298422859710161695046278715245855121
131
- 0.030000 61803398874989478928365168519136536547194805389435200848107342688424034467
132
- 0.030000 618033988749894789283651685191365365471948053894352008481073426884240343509
133
- 0.030000 6180339887498948294571027916661222540210003624234170715361482714540612255771
134
- 0.030000 61803398874989487766524411943583052027986313265829514720223808493784628461601
135
- 0.030000 618033988749894800532217995004297294265682700282490226136494383363790190149697
136
- 0.030000 6180339887498948416698319280344483481399122642162528507048910242032867738649237
137
- 0.020000 61803398874989489103496864767062961278898774093676800018696699321068267432312833
138
- 0.030000 618033988749894759394604061974146240391453136348727601568097742524293606434406857
139
- 0.030000 6180339887498947804570623956855835799750586730828140653471168226341158572966019139
140
- 0.030000 61803398874989483100696239659303319497571196124462157841676261489768925936587112561
141
- 0.040000 618033988749894911886802398044952578976757222303513599328195882519406702676701872319
142
- 0.030000 6180339887498948040470157294423934003086968742249909047796181923571167782622608752829
143
- 0.040000 61803398874989482130138159641880286889558652991755453590739062278308316616857143476423
144
- 0.040000 618033988749894793694396209256547719156563080809452726102954734101536945518474539565289
145
- 0.040000 6180339887498948378655728287161559587390005993824156217900521559920108985586295718806271
146
- 0.040000 61803398874989483786557282871615595873900059938241562179005215599201089855862957188055087
147
- 0.030000 618033988749894837865572828716155958739000599382415621790052155992010898558629571880550497
148
- 0.020000 6180339887498948830968576870427947960714166184011296269736399160078562264717483249716166887
149
- 0.040000 61803398874989484691182980038148372620548380318615842282676970799517996414125332249876365411
150
- 0.030000 618033988749894890333863264375057010044603181444123867803013957610391478937847325466187268189
151
- 0.040000 6180339887498947977001918745221006711878151744937975851870262250979402473717801191356835561549
152
- 0.050000 61803398874989483475366043046328320673053037727392809823342131810292073999820700166788504093107
153
- 0.040000 618033988749894819932273008086810192513444296161875893014863280900928542947636248655004447015003
154
- 0.030000 6180339887498948673607127596915238380081197557204429497142489999473035735094626582962223475327741
155
- 0.040000 61803398874989482941796095840775292161237938807358930435474042471020354906000153058324802711846941
156
- 0.030000 618033988749894799063759517380736188495787093956106388067133564520523529500432628412868570787086393
157
- 0.040000 6180339887498948233471206702023495749890609292500927210972190526722675451480877501491721358521925753
158
-
159
-
160
- ####Larger numbers
161
-
162
- For primes nearing a googol (10**100) it is still subsecond.
163
- Starting at a google - 3 the following was used for benchmarking,
164
-
165
- Benchmark.bm do |x|
166
- (1..50).each do |z|
167
- exponent = "#{z}00".to_i
168
- number = 10**exponent - 3
169
- x.report("10**#{exponent} - 3") { number.prime? }
170
- end
171
- end
172
-
173
- ####Results (formatted for readability)
174
-
175
- user system total real
176
- 10**100 - 3 0.000000 0.000000 0.000000 ( 0.000873)
177
- 10**200 - 3 0.000000 0.000000 0.000000 ( 0.003954)
178
- 10**300 - 3 0.010000 0.000000 0.010000 ( 0.008990)
179
- 10**400 - 3 0.020000 0.000000 0.020000 ( 0.019595)
180
- 10**500 - 3 0.030000 0.000000 0.030000 ( 0.030311)
181
- 10**600 - 3 0.050000 0.000000 0.050000 ( 0.045907)
182
- 10**700 - 3 0.080000 0.010000 0.090000 ( 0.086039)
183
- 10**800 - 3 0.120000 0.000000 0.120000 ( 0.120604)
184
- 10**900 - 3 0.140000 0.000000 0.140000 ( 0.137074)
185
- 10**1000 - 3 0.190000 0.000000 0.190000 ( 0.197226)
186
- 10**1100 - 3 0.270000 0.010000 0.280000 ( 0.267312)
187
- 10**1200 - 3 0.340000 0.000000 0.340000 ( 0.344282)
188
- 10**1300 - 3 0.370000 0.000000 0.370000 ( 0.376330)
189
- 10**1400 - 3 0.520000 0.010000 0.530000 ( 0.530934)
190
- 10**1500 - 3 0.610000 0.010000 0.620000 ( 0.622023)
191
- 10**1600 - 3 0.810000 0.010000 0.820000 ( 0.817583)
192
- 10**1700 - 3 0.910000 0.010000 0.920000 ( 0.917380)
193
- 10**1800 - 3 1.050000 0.010000 1.060000 ( 1.071910)
194
- 10**1900 - 3 1.180000 0.020000 1.200000 ( 1.189116)
195
- 10**2000 - 3 1.410000 0.020000 1.430000 ( 1.438527)
196
- 10**2100 - 3 1.480000 0.020000 1.500000 ( 1.499630)
197
- 10**2200 - 3 1.820000 0.030000 1.850000 ( 1.838164)
198
- 10**2300 - 3 2.000000 0.030000 2.030000 ( 2.026655)
199
- 10**2400 - 3 1.970000 0.020000 1.990000 ( 1.997051)
200
- 10**2500 - 3 2.580000 0.040000 2.620000 ( 2.616159)
201
- 10**2600 - 3 3.060000 0.050000 3.110000 ( 3.110208)
202
- 10**2700 - 3 2.900000 0.050000 2.950000 ( 2.950306)
203
- 10**2800 - 3 2.900000 0.050000 2.950000 ( 2.945470)
204
- 10**2900 - 3 3.310000 0.050000 3.360000 ( 3.360690)
205
- 10**3000 - 3 3.700000 0.070000 3.770000 ( 3.765682)
206
- 10**3100 - 3 4.610000 0.070000 4.680000 ( 4.680919)
207
- 10**3200 - 3 5.530000 0.080000 5.610000 ( 5.615243)
208
- 10**3300 - 3 4.770000 0.090000 4.860000 ( 4.860779)
209
- 10**3400 - 3 5.190000 0.090000 5.280000 ( 5.278715)
210
- 10**3500 - 3 5.800000 0.100000 5.900000 ( 5.891275)
211
- 10**3600 - 3 6.310000 0.110000 6.420000 ( 6.417548)
212
- 10**3700 - 3 8.450000 0.070000 8.520000 ( 8.510452)
213
- 10**3800 - 3 8.830000 0.070000 8.900000 ( 8.901605)
214
- 10**3900 - 3 8.040000 0.080000 8.120000 ( 8.114340)
215
- 10**4000 - 3 10.030000 0.050000 10.080000 ( 10.087971)
216
- 10**4100 - 3 8.730000 0.060000 8.790000 ( 8.782747)
217
- 10**4200 - 3 11.550000 0.070000 11.620000 ( 11.607290)
218
- 10**4300 - 3 10.810000 0.100000 10.910000 ( 10.913006)
219
- 10**4400 - 3 12.380000 0.180000 12.560000 ( 12.552739)
220
- 10**4500 - 3 12.580000 0.180000 12.760000 ( 12.753963)
221
- 10**4600 - 3 13.130000 0.190000 13.320000 ( 13.311686)
222
- 10**4700 - 3 14.380000 0.190000 14.570000 ( 14.560988)
223
- 10**4800 - 3 13.680000 0.220000 13.900000 ( 13.895690)
224
- 10**4900 - 3 15.800000 0.220000 16.020000 ( 16.017528)
225
- 10**5000 - 3 15.290000 0.230000 15.520000 ( 15.513277)
226
47
 
48
+ #### The results (formatted for readability):
49
+
50
+ | MillerRabin | Generator23 | Eratosthenes | TrialDivision | Number Tested |
51
+ |------------:|------------:|-------------:|--------------:|:---------------|
52
+ | 0.000 | 0.000 | 0.000 | 0.000 | 2 |
53
+ | 0.000 | 0.000 | 0.000 | 0.000 | 7 |
54
+ | 0.000 | 0.000 | 0.000 | 0.000 | 67 |
55
+ | 0.000 | 0.000 | 0.000 | 0.000 | 619 |
56
+ | 0.000 | 0.000 | 0.000 | 0.000 | 6197 |
57
+ | 0.000 | 0.000 | 0.000 | 0.000 | 61813 |
58
+ | 0.000 | 0.000 | 0.000 | 0.000 | 618041 |
59
+ | 0.000 | 0.000 | 0.000 | 0.000 | 6180341 |
60
+ | 0.000 | 0.000 | 0.000 | 0.000 | 61803419 |
61
+ | 0.000 | 0.000 | 0.015 | 0.016 | 618034003 |
62
+ | 0.000 | 0.015 | 0.016 | 0.141 | 6180339923 |
63
+ | 0.000 | 0.015 | 0.031 | 1.079 | 61803398903 |
64
+ | 0.015 | 0.063 | 0.047 | 6.500 | 618033988751 |
65
+ | 0.000 | 0.156 | 0.187 | 64.657 | 6180339887543 |
66
+ | 0.000 | 0.484 | 0.656 | 631.251 | 61803398875019 |
67
+
68
+ #### Removing TrialDivision as it is now exceeding 2 minutes to determine primality
69
+
70
+ | MillerRabin | Generator23 | Eratosthenes | Number Tested |
71
+ |------------:|------------:|-------------:|:---------------------|
72
+ | 0.000 | 1.578 | 1.905 | 618033988749911 |
73
+ | 0.000 | 4.828 | 5.938 | 6180339887498971 |
74
+ | 0.000 | 15.219 | 20.453 | 61803398874989489 |
75
+ | 0.000 | 51.344 | 78.500 | 618033988749894811 |
76
+ | 0.000 | 199.203 | 604.875 | 6180339887498948681 |
77
+
78
+ #### Removing Generator23 as it is now exceeding 2 minutes to determine primality
79
+ #### Removing Eratosthenes as it is now exceeding 2 minutes to determine primality
80
+
81
+ | MillerRabin | Number Tested |
82
+ |-------------|-------------------------------------------------------------------------------------------------------|
83
+ | 0.000 | 61803398874989486159 |
84
+ | 0.000 | 618033988749894877249 |
85
+ | 0.000 | 6180339887498948771861 |
86
+ | 0.000 | 61803398874989479329793 |
87
+ | 0.000 | 618033988749894843629693 |
88
+ | 0.000 | 6180339887498948973166649 |
89
+ | 0.000 | 61803398874989485436698673 |
90
+ | 0.016 | 618033988749894820007248007 |
91
+ | 0.000 | 6180339887498948474950385857 |
92
+ | 0.000 | 61803398874989473754387579003 |
93
+ | 0.000 | 618033988749894825504806010893 |
94
+ | 0.000 | 6180339887498947551360618332249 |
95
+ | 0.000 | 61803398874989482269005624377351 |
96
+ | 0.000 | 618033988749894786661259224809529 |
97
+ | 0.000 | 6180339887498948010727780323950599 |
98
+ | 0.000 | 61803398874989484718963821666894041 |
99
+ | 0.000 | 618033988749894884083126364088041501 |
100
+ | 0.015 | 6180339887498948102961500692498350149 |
101
+ | 0.000 | 61803398874989478668431765490160893959 |
102
+ | 0.000 | 618033988749894805573783586380189794451 |
103
+ | 0.000 | 6180339887498948055737835863801897943079 |
104
+ | 0.016 | 61803398874989485393081637096535678255353 |
105
+ | 0.000 | 618033988749894834588003257131289987252251 |
106
+ | 0.000 | 6180339887498947881652517839295296785350671 |
107
+ | 0.000 | 61803398874989486244165414105234617248252037 |
108
+ | 0.016 | 618033988749894783213491626788008578938568879 |
109
+ | 0.000 | 6180339887498948782872866439052136911913091139 |
110
+ | 0.000 | 61803398874989490364029864846980172112537321529 |
111
+ | 0.000 | 618033988749894863075479441166460873230870642701 |
112
+ | 0.016 | 6180339887498948306236240753237881949152685850683 |
113
+ | 0.000 | 61803398874989488254659266067206448022023187726371 |
114
+ | 0.000 | 618033988749894861777405226532753966098246560383039 |
115
+ | 0.000 | 6180339887498948285467053319098571435030700533743709 |
116
+ | 0.015 | 61803398874989477537758550051322222735078764216058197 |
117
+ | 0.000 | 618033988749894860448177230747838093194439500102631463 |
118
+ | 0.000 | 6180339887498948264199405386539917468569787569258103079 |
119
+ | 0.016 | 61803398874989493531029795335430005513685313509163794507 |
120
+ | 0.000 | 618033988749894848198012021594053408512953632558975811599 |
121
+ | 0.000 | 6180339887498947959306404625379054205386139310393785319457 |
122
+ | 0.015 | 61803398874989483774453770978282381091808569225505635565881 |
123
+ | 0.000 | 618033988749894815443792511252200669382367419606694849675361 |
124
+ | 0.016 | 6180339887498947619220040347787051296966435652506272353222859 |
125
+ | 0.000 | 61803398874989487610181945125549561435952112121023814594199579 |
126
+ | 0.015 | 618033988749894876101819451255495614359521121210238145941995523 |
127
+ | 0.000 | 6180339887498948212955080513466361817213398943496249088445251857 |
128
+ | 0.016 | 61803398874989482129550805134663618172133989434962490884452515863 |
129
+ | 0.000 | 618033988749894751143429459463296107944467923968039965359763095659 |
130
+ | 0.016 | 6180339887498948446795342486410828729802972178101532233394458460333 |
131
+ | 0.000 | 61803398874989478481642718356729934335736646975120073823244888571933 |
132
+ | 0.015 | 618033988749894856652155661655839578904883367421943720360845238075493 |
133
+ | 0.016 | 6180339887498948949645441833030610378635590461796733108293232926654757 |
134
+ | 3.984 | 61803398874989480301481173134972953636273741716112229370497596164931657 |
135
+ | 0.016 | 618033988749894753974954423641286068895632548351228417905324051774046223 |
136
+ | 0.016 | 6180339887498948520546690390581730038298422859710161695046278715245855121 |
137
+ | 0.015 | 61803398874989478928365168519136536547194805389435200848107342688424034467 |
138
+ | 0.016 | 618033988749894789283651685191365365471948053894352008481073426884240343509 |
139
+ | 0.015 | 6180339887498948294571027916661222540210003624234170715361482714540612255771 |
140
+ | 0.016 | 61803398874989487766524411943583052027986313265829514720223808493784628461601 |
141
+ | 0.000 | 618033988749894800532217995004297294265682700282490226136494383363790190149697 |
142
+ | 0.016 | 6180339887498948416698319280344483481399122642162528507048910242032867738649237 |
143
+ | 0.015 | 61803398874989489103496864767062961278898774093676800018696699321068267432312833 |
144
+ | 0.000 | 618033988749894759394604061974146240391453136348727601568097742524293606434406857 |
145
+ | 0.016 | 6180339887498947804570623956855835799750586730828140653471168226341158572966019139 |
146
+ | 0.016 | 61803398874989483100696239659303319497571196124462157841676261489768925936587112561 |
147
+ | 0.015 | 618033988749894911886802398044952578976757222303513599328195882519406702676701872319 |
148
+ | 0.016 | 6180339887498948040470157294423934003086968742249909047796181923571167782622608752829 |
149
+ | 0.016 | 61803398874989482130138159641880286889558652991755453590739062278308316616857143476423 |
150
+ | 0.015 | 618033988749894793694396209256547719156563080809452726102954734101536945518474539565289 |
151
+ | 0.016 | 6180339887498948378655728287161559587390005993824156217900521559920108985586295718806271 |
152
+ | 0.016 | 61803398874989483786557282871615595873900059938241562179005215599201089855862957188055087 |
153
+ | 0.015 | 618033988749894837865572828716155958739000599382415621790052155992010898558629571880550497 |
154
+ | 0.016 | 6180339887498948830968576870427947960714166184011296269736399160078562264717483249716166887 |
155
+ | 0.016 | 61803398874989484691182980038148372620548380318615842282676970799517996414125332249876365411 |
156
+ | 0.015 | 618033988749894890333863264375057010044603181444123867803013957610391478937847325466187268189 |
157
+ | 0.016 | 6180339887498947977001918745221006711878151744937975851870262250979402473717801191356835561549 |
158
+ | 0.031 | 61803398874989483475366043046328320673053037727392809823342131810292073999820700166788504093107 |
159
+ | 0.016 | 618033988749894819932273008086810192513444296161875893014863280900928542947636248655004447015003 |
160
+ | 0.015 | 6180339887498948673607127596915238380081197557204429497142489999473035735094626582962223475327741 |
161
+ | 0.016 | 61803398874989482941796095840775292161237938807358930435474042471020354906000153058324802711846941 |
162
+ | 0.015 | 618033988749894799063759517380736188495787093956106388067133564520523529500432628412868570787086393 |
163
+ | 0.016 | 6180339887498948233471206702023495749890609292500927210972190526722675451480877501491721358521925753 |
164
+ | 0.015 | 61803398874989482334712067020234957498906092925009272109721905267226754514808775014917213585219257561 |
227
165
 
228
166
  ## Installation
229
167
 
@@ -252,12 +190,4 @@ Or install it yourself as:
252
190
  Prime::MillerRabin.speed_intercept
253
191
 
254
192
  # To use the speed intercept and have Miller Rabin be the default prime generator in all cases use:
255
- Prime::MillerRabin.make_default
256
-
257
- ## Contributing
258
-
259
- 1. Fork it
260
- 2. Create your feature branch (`git checkout -b my-new-feature`)
261
- 3. Commit your changes (`git commit -am 'Add some feature'`)
262
- 4. Push to the branch (`git push origin my-new-feature`)
263
- 5. Create new Pull Request
193
+ Prime::MillerRabin.make_default
@@ -1,6 +1,5 @@
1
- require 'backports' if RUBY_VERSION < '1.9'
2
1
  require 'prime'
3
2
 
4
3
  class Prime::MillerRabin < Prime::PseudoPrimeGenerator
5
- VERSION = "0.0.2"
4
+ VERSION = "0.1.0"
6
5
  end
@@ -1,57 +1,15 @@
1
- require 'backports' if RUBY_VERSION < '1.9'
2
1
  require 'prime'
3
2
  require "prime_miller_rabin/version"
4
3
 
5
4
  class Prime::MillerRabin < Prime::PseudoPrimeGenerator
6
5
 
7
6
  def self.speed_intercept
8
- if RUBY_VERSION >= "2.0"
9
- Prime.send(:prepend, Prime::MillerRabin::PrimeIntercept)
10
- else
11
- Prime.class_eval <<-INTERCEPT_EVAL, __FILE__, __LINE__ + 1
12
- def prime_with_intercept?(value, *args)
13
- args.first.instance_of?(Prime::MillerRabin) ? args.first.prime?(value) : prime_without_intercept?(value, *args)
14
- end
15
-
16
- alias_method "prime_without_intercept?", "prime?"
17
- alias_method "prime?", "prime_with_intercept?"
18
- INTERCEPT_EVAL
19
- end
7
+ Prime.send(:prepend, Prime::MillerRabin::PrimeIntercept)
20
8
  end
21
9
 
22
10
  def self.make_default
23
- if RUBY_VERSION >= "2.0"
24
- Prime.send(:prepend, Prime::MillerRabin::Default::Prime, Prime::MillerRabin::PrimeIntercept)
25
- Integer.send(:prepend, Prime::MillerRabin::Default::Integer)
26
- else
27
- Prime.class_eval <<-PRIME_DEFAULT_EVAL, __FILE__, __LINE__ + 1
28
- # Change the default generator used to be MillerRabin
29
- def prime_with_mr_default?(value, generator = ::Prime::MillerRabin.new)
30
- generator.instance_of?(Prime::MillerRabin) ? generator.prime?(value) : prime_without_mr_default?(value, generator)
31
- end
32
-
33
- def prime_division_with_mr_default?(value, generator = ::Prime::MillerRabin.new)
34
- prime_division_without_mr_default?(value, generator)
35
- end
36
-
37
- alias_method "prime_without_mr_default?", "prime?"
38
- alias_method "prime?", "prime_with_mr_default?"
39
-
40
- alias_method "prime_division_without_mr_default?", "prime_division"
41
- alias_method "prime_division", "prime_division_with_mr_default?"
42
- PRIME_DEFAULT_EVAL
43
-
44
- Integer.class_eval <<-INTEGER_DEFAULT_EVAL, __FILE__, __LINE__ + 1
45
-
46
- def prime_division_with_mr_default(generator = ::Prime::MillerRabin.new)
47
- prime_division_without_mr_default(generator)
48
- end
49
-
50
- alias_method "prime_division_with_mr_default?", "prime_division"
51
- alias_method "prime_division", "prime_division_with_mr_default?"
52
- INTEGER_DEFAULT_EVAL
53
-
54
- end
11
+ Prime.send(:prepend, Prime::MillerRabin::Default::Prime, Prime::MillerRabin::PrimeIntercept)
12
+ Integer.send(:prepend, Prime::MillerRabin::Default::Integer)
55
13
  end
56
14
 
57
15
  def succ()
metadata CHANGED
@@ -1,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prime_miller_rabin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank Hall
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2013-06-05 00:00:00.000000000 Z
11
+ date: 2022-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: backports
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
- - - ~>
17
+ - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '1.3'
19
+ version: '2.3'
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - ~>
24
+ - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '1.3'
26
+ version: '2.3'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - '>='
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
33
+ version: '13'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - '>='
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: '13'
55
41
  description: Test primes faster than Ruby's default methods by using the Miller-Rabin
56
42
  method.
57
43
  email:
@@ -60,36 +46,35 @@ executables: []
60
46
  extensions: []
61
47
  extra_rdoc_files: []
62
48
  files:
63
- - .gitignore
64
49
  - Gemfile
65
50
  - LICENSE.txt
66
51
  - README.md
67
52
  - Rakefile
68
53
  - lib/prime_miller_rabin.rb
69
54
  - lib/prime_miller_rabin/version.rb
70
- - prime_miller_rabin.gemspec
71
- homepage: ''
55
+ homepage: https://github.com/ChapterHouse/prime_miller_rabin
72
56
  licenses:
73
57
  - MIT
74
- metadata: {}
75
- post_install_message:
58
+ metadata:
59
+ homepage_uri: https://github.com/ChapterHouse/prime_miller_rabin
60
+ source_code_uri: https://github.com/ChapterHouse/prime_miller_rabin/tree/v0.1.0
61
+ post_install_message:
76
62
  rdoc_options: []
77
63
  require_paths:
78
64
  - lib
79
65
  required_ruby_version: !ruby/object:Gem::Requirement
80
66
  requirements:
81
- - - '>='
67
+ - - ">="
82
68
  - !ruby/object:Gem::Version
83
- version: '0'
69
+ version: 3.0.0
84
70
  required_rubygems_version: !ruby/object:Gem::Requirement
85
71
  requirements:
86
- - - '>='
72
+ - - ">="
87
73
  - !ruby/object:Gem::Version
88
74
  version: '0'
89
75
  requirements: []
90
- rubyforge_project:
91
- rubygems_version: 2.0.3
92
- signing_key:
76
+ rubygems_version: 3.2.32
77
+ signing_key:
93
78
  specification_version: 4
94
79
  summary: Test primes faster than Ruby's default methods by using the Miller-Rabin
95
80
  method.
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
@@ -1,24 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'prime_miller_rabin/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "prime_miller_rabin"
8
- spec.version = Prime::MillerRabin::VERSION
9
- spec.authors = ["Frank Hall"]
10
- spec.email = ["ChapterHouse.Dune@gmail.com"]
11
- spec.description = %q{Test primes faster than Ruby's default methods by using the Miller-Rabin method.}
12
- spec.summary = %q{Test primes faster than Ruby's default methods by using the Miller-Rabin method.}
13
- spec.homepage = ""
14
- spec.license = "MIT"
15
-
16
- spec.files = `git ls-files`.split($/)
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_runtime_dependency "backports" # Wish this could be conditional. It is only used for ruby 1.8 for as long as I support it.
22
- spec.add_development_dependency "bundler", "~> 1.3"
23
- spec.add_development_dependency "rake"
24
- end