primes-utils 1.0.3 → 1.0.4
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 +4 -4
- data/README.md +7 -0
- data/lib/primes/utils/version.rb +1 -1
- data/lib/primes/utils.rb +10 -10
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6395f48acbfe0ee860220c35690d48b9c45aa045
|
4
|
+
data.tar.gz: 16150fa85ec9bf964012c59f04257e76665ddb79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 873cd552aa258335f00100627cfa5a2a4e65f3a3ac09bb5b39ebc88e4bd1b9f3039b2406b6c862d077f79f580f08094c9f5e7779dcbbd6b3ed5795a01bf36234
|
7
|
+
data.tar.gz: cad68673964dce20ecc8f876d75b908a29ab2537d0ddc757fe632cb5e23ce30b6fc86660a11c371f2d687db144e217ba1860b03cdc92eb795104ed8d743a892e
|
data/README.md
CHANGED
@@ -31,6 +31,8 @@ This replaces the `prime?` method in the `prime.rb` standard library.
|
|
31
31
|
101.prime? => true
|
32
32
|
100.prime? => false
|
33
33
|
-71.prime? => true
|
34
|
+
0.prime? => false
|
35
|
+
1.prime? => false
|
34
36
|
```
|
35
37
|
**primemr?(k=20)**
|
36
38
|
Determine if the absolute value of an integer is prime using Miller-Rabin test. Return 'true' or 'false'.
|
@@ -43,6 +45,8 @@ The method's reliability can be increased by increasing the default input parame
|
|
43
45
|
1111111111111111111.primemr?(50) => true
|
44
46
|
11111111111111111111.primemr? => false
|
45
47
|
-3333333333333333333.primemr? => false
|
48
|
+
0.prime? => false
|
49
|
+
1.prime? => false
|
46
50
|
```
|
47
51
|
**factors(p=13) or prime_division(p=13)**
|
48
52
|
Determine the prime factorization of the absolute value of an integer.
|
@@ -57,6 +61,8 @@ Can change SP PG used on input. Acceptable range are primes from 3 - 19.
|
|
57
61
|
123456789.factors 17 => [[3, 2], [3607, 1], [3803, 1]]
|
58
62
|
123456789.factors(17) => [[3, 2], [3607, 1], [3803, 1]]
|
59
63
|
-12345678.factors => [[2, 1], [3, 2], [47, 1], [14593, 1]]
|
64
|
+
0.factors => []
|
65
|
+
1.factors => []
|
60
66
|
```
|
61
67
|
**primes(start_num=0)**
|
62
68
|
Create an array of primes from the range start_num - end_num.
|
@@ -82,6 +88,7 @@ Can change SP PG used on input. Acceptable range are primes from 3 - 19.
|
|
82
88
|
1500000.nthprime => 23879519
|
83
89
|
2000000.nthprime 13 => 32452843
|
84
90
|
-500000.nthprime => 7368787
|
91
|
+
0.nthprime => 0
|
85
92
|
```
|
86
93
|
## Coding Implementations
|
87
94
|
The methods `primemr`, `nthprime/primenth`, and `primes` are coded in pure ruby.
|
data/lib/primes/utils/version.rb
CHANGED
data/lib/primes/utils.rb
CHANGED
@@ -106,7 +106,7 @@ module Primes
|
|
106
106
|
primes = []
|
107
107
|
|
108
108
|
n = self.abs # the desired nth prime
|
109
|
-
return seeds[n-1] if n <
|
109
|
+
return n != 0 ? seeds[n-1] : 0 if n < seeds.size
|
110
110
|
numb = 22*n # approx value need to check primes up to
|
111
111
|
|
112
112
|
# find primes <= Pn, compute modPn then Prime Gen residues for Pn
|
@@ -166,12 +166,12 @@ module Primes
|
|
166
166
|
num, start_num = start_num, num if start_num > num
|
167
167
|
|
168
168
|
primes = [2,3,5,7,11,13] # P13 excluded primes lists
|
169
|
+
plast = primes.last # last prime in primes
|
170
|
+
return primes.select {|p| p >= start_num && p <= num} if num <= plast
|
169
171
|
|
170
|
-
|
172
|
+
mod = primes.reduce(:*) # P13 modulus value 2*3*5*7*11*13
|
171
173
|
|
172
|
-
mod
|
173
|
-
|
174
|
-
residues=[1]; 17.step(mod,2) {|i| residues << i if mod.gcd(i) == 1}
|
174
|
+
residues=[1]; plast.step(mod,2) {|i| residues << i if mod.gcd(i) == 1}}
|
175
175
|
rescnt = residues.size # number of residues
|
176
176
|
residues << mod+1 # to make algorithm easier
|
177
177
|
|
@@ -202,11 +202,11 @@ module Primes
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
# the prms array now has all the primes positions for primes r1..N
|
205
|
-
primes = start_num <=
|
206
|
-
k = start_num
|
207
|
-
modk = mod*k
|
208
|
-
m = rescnt*k
|
209
|
-
r = 0
|
205
|
+
primes = start_num <= plast ? primes.drop_while {|p| p < start_num} : []
|
206
|
+
k = (start_num-2).abs/mod # start_num's residue group value
|
207
|
+
modk = mod*k # start_num's mod group value
|
208
|
+
m = rescnt*k # number of prms elements upto kth resgroup
|
209
|
+
r = 0 # begin process at start of resgroup
|
210
210
|
while m < maxprms
|
211
211
|
r +=1; if r > rescnt; r=1; modk +=mod end
|
212
212
|
if prms[m]
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: primes-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jabari Zakiya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
|
-
prerelease: false
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '1.9'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
21
22
|
version_requirements: !ruby/object:Gem::Requirement
|
22
23
|
requirements:
|
23
24
|
- - "~>"
|
24
25
|
- !ruby/object:Gem::Version
|
25
26
|
version: '1.9'
|
26
|
-
type: :development
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
-
prerelease: false
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
31
30
|
requirements:
|
32
31
|
- - "~>"
|
33
32
|
- !ruby/object:Gem::Version
|
34
33
|
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
35
36
|
version_requirements: !ruby/object:Gem::Requirement
|
36
37
|
requirements:
|
37
38
|
- - "~>"
|
38
39
|
- !ruby/object:Gem::Version
|
39
40
|
version: '10.0'
|
40
|
-
type: :development
|
41
41
|
description: 'Methods: prime?, primemr?, primes, nthprime/primenth, factors/prime_division'
|
42
42
|
email:
|
43
43
|
- jzakiya@gmail.com
|