primes-utils 1.0.6 → 1.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 +7 -0
- data/README.md +23 -8
- data/lib/primes/utils/version.rb +1 -1
- data/lib/primes/utils.rb +1 -1
- data/primes-utils.gemspec +1 -0
- metadata +49 -70
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7497029778cb110fc50639cd15d0dbabad984349
|
4
|
+
data.tar.gz: 2175a6b5900225783fddcafff2b8689a8409e7df
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 300970b9508005dc6a21ca4c1d516f5e681c0127abd28b650d8d63fedd912d9d21fff5ddafdfe8143e8048c83c7e8746b96b480cb4d4bfdf4ef740a250aef741
|
7
|
+
data.tar.gz: 4518384b744815f59ce8303f5e5716eafd97899f04395df00d06c5397a764abd5f0d5b59fd43471a6f0531be2b77d1ec0f8c901c51071c60ccc36139c28adaf5
|
data/README.md
CHANGED
@@ -25,20 +25,25 @@ Then require as:
|
|
25
25
|
## Methods
|
26
26
|
|
27
27
|
**prime?**
|
28
|
+
|
28
29
|
Determine if the absolute value of an integer is prime. Return 'true' or 'false'.
|
29
30
|
This replaces the `prime?` method in the `prime.rb` standard library.
|
31
|
+
|
30
32
|
```
|
31
33
|
101.prime? => true
|
32
34
|
100.prime? => false
|
33
35
|
-71.prime? => true
|
34
|
-
|
35
|
-
|
36
|
+
0.prime? => false
|
37
|
+
1.prime? => false
|
36
38
|
```
|
39
|
+
|
37
40
|
**primemr?(k=20)**
|
41
|
+
|
38
42
|
Determine if the absolute value of an integer is prime using Miller-Rabin test. Return 'true' or 'false'.
|
39
|
-
Miller-Rabin here is super fast, but probabilistic (not deterministic), primality test.
|
43
|
+
Miller-Rabin here is super fast, but probabilistic (not deterministic), primality test.
|
40
44
|
https://en.wikipedia.org/wiki/Miller-Rabin_primality_test
|
41
45
|
The method's reliability can be increased by increasing the default input parameter of k=20.
|
46
|
+
|
42
47
|
```
|
43
48
|
1111111111111111111.primemr? => true
|
44
49
|
1111111111111111111.primemr? 50 => true
|
@@ -48,12 +53,15 @@ The method's reliability can be increased by increasing the default input parame
|
|
48
53
|
0.prime? => false
|
49
54
|
1.prime? => false
|
50
55
|
```
|
51
|
-
|
56
|
+
|
57
|
+
**factors(p=13) or prime_division(p=13)**
|
58
|
+
|
52
59
|
Determine the prime factorization of the absolute value of an integer.
|
53
60
|
This replaces the `prime division` method in the `prime.rb` standard library.
|
54
61
|
Returns an array of arrays of factors and exponents: [[2,4],[3,2],[5,1]] => (2^4)(3^2)(5^1) = (16)(9)(5) = 720
|
55
62
|
Default Strictly Prime (SP) Prime Generator (PG) used here is P13.
|
56
63
|
Can change SP PG used on input. Acceptable primes range: [3 - 19].
|
64
|
+
|
57
65
|
```
|
58
66
|
1111111111111111111.prime_division => [[1111111111111111111, 1]]
|
59
67
|
11111111111111111111.prime_division => [[11, 1], [41, 1], [101, 1], [271, 1], [3541, 1], [9091, 1], [27961, 1]]
|
@@ -64,10 +72,13 @@ Can change SP PG used on input. Acceptable primes range: [3 - 19].
|
|
64
72
|
0.factors => []
|
65
73
|
1.factors => []
|
66
74
|
```
|
67
|
-
|
68
|
-
|
75
|
+
|
76
|
+
**primes(start=0)**
|
77
|
+
|
78
|
+
Create an array of primes from the absolute value range (|start| - |end|).
|
69
79
|
The order of the range doesn't matter if both given: start.primes end <=> end.prime start
|
70
80
|
If only one parameter used, then all the primes upto that number will be returned.
|
81
|
+
|
71
82
|
```
|
72
83
|
50.primes => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
|
73
84
|
50.primes 125 => [53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113]
|
@@ -81,10 +92,13 @@ prms => [1000003, 1000033, 1000037, 1000039, 1000081, 1000099]
|
|
81
92
|
0.primes => []
|
82
93
|
1.primes => []
|
83
94
|
```
|
95
|
+
|
84
96
|
**primenth(p=11) or nthprime(p=11)**
|
97
|
+
|
85
98
|
Return the value of the nth (absolute value) prime.
|
86
99
|
Default Strictly Prime (SP) Prime Generator (PG) used here is P11.
|
87
100
|
Can change SP PG used on input. Acceptable primes range: [3 - 19].
|
101
|
+
|
88
102
|
```
|
89
103
|
1000000.primenth => 15485863
|
90
104
|
1500000.nthprime => 23879519
|
@@ -92,6 +106,7 @@ Can change SP PG used on input. Acceptable primes range: [3 - 19].
|
|
92
106
|
-500000.nthprime => 7368787
|
93
107
|
0.nthprime => 0
|
94
108
|
```
|
109
|
+
|
95
110
|
## Coding Implementations
|
96
111
|
The methods `primemr`, `nthprime/primenth`, and `primes` are coded in pure ruby.
|
97
112
|
The methods `prime?` and `prime_division/factors` have two implementations.
|
@@ -109,8 +124,8 @@ Jabari Zakiya
|
|
109
124
|
## References
|
110
125
|
[1]https://www.scribd.com/doc/150217723/Improved-Primality-Testing-and-Factorization-in-Ruby-revised
|
111
126
|
[2]https://www.scribd.com/doc/228155369/The-Segmented-Sieve-of-Zakiya-SSoZ
|
112
|
-
[3]https://www.scribd.com/doc/73385696/The-Sieve-of-Zakiya
|
113
|
-
[4]https://en.wikipedia.org/wiki/GNU_Core_Utilities
|
127
|
+
[3]https://www.scribd.com/doc/73385696/The-Sieve-of-Zakiya
|
128
|
+
[4]https://en.wikipedia.org/wiki/GNU_Core_Utilities
|
114
129
|
[5]https://en.wikipedia.org/wiki/Factor_(Unix)
|
115
130
|
|
116
131
|
## License
|
data/lib/primes/utils/version.rb
CHANGED
data/lib/primes/utils.rb
CHANGED
@@ -107,7 +107,7 @@ module Primes
|
|
107
107
|
|
108
108
|
n = self.abs # the desired nth prime
|
109
109
|
return n != 0 ? seeds[n-1] : 0 if n < seeds.size
|
110
|
-
numb =
|
110
|
+
numb = (n*(Math.log(n)+2)).to_i # approx close value > nth prime
|
111
111
|
|
112
112
|
# find primes <= Pn, compute modPn then Prime Gen residues for Pn
|
113
113
|
primes = seeds[0..seeds.index(p)]; mod = primes.reduce(:*)
|
data/primes-utils.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.bindir = "exe"
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
|
+
spec.license = "GPL-2.0"
|
20
21
|
|
21
22
|
#if spec.respond_to?(:metadata)
|
22
23
|
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
metadata
CHANGED
@@ -1,63 +1,51 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: primes-utils
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 6
|
10
|
-
version: 1.0.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Jabari Zakiya
|
14
8
|
autorequire:
|
15
9
|
bindir: exe
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2015-04-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: bundler
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 29
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 9
|
32
|
-
version: "1.9"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.9'
|
33
20
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: rake
|
37
21
|
prerelease: false
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
48
34
|
type: :development
|
49
|
-
|
50
|
-
|
51
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: 'Methods: prime?, primemr?, primes, nthprime/primenth, factors/prime_division'
|
42
|
+
email:
|
52
43
|
- jzakiya@gmail.com
|
53
44
|
executables: []
|
54
|
-
|
55
45
|
extensions: []
|
56
|
-
|
57
46
|
extra_rdoc_files: []
|
58
|
-
|
59
|
-
|
60
|
-
- .gitignore
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
61
49
|
- CODE_OF_CONDUCT.md
|
62
50
|
- Gemfile
|
63
51
|
- README.md
|
@@ -68,37 +56,28 @@ files:
|
|
68
56
|
- lib/primes/utils/version.rb
|
69
57
|
- primes-utils.gemspec
|
70
58
|
homepage: https://github.com/jzakiya/primes-utils
|
71
|
-
licenses:
|
72
|
-
|
59
|
+
licenses:
|
60
|
+
- GPL-2.0
|
61
|
+
metadata: {}
|
73
62
|
post_install_message:
|
74
63
|
rdoc_options: []
|
75
|
-
|
76
|
-
require_paths:
|
64
|
+
require_paths:
|
77
65
|
- lib
|
78
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
-
|
80
|
-
requirements:
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
81
68
|
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
version: "0"
|
87
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
|
-
requirements:
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
90
73
|
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
version: "0"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
96
76
|
requirements: []
|
97
|
-
|
98
77
|
rubyforge_project:
|
99
|
-
rubygems_version:
|
78
|
+
rubygems_version: 2.4.6
|
100
79
|
signing_key:
|
101
|
-
specification_version:
|
80
|
+
specification_version: 4
|
102
81
|
summary: suite of extremely fast utility methods for testing and generating primes
|
103
82
|
test_files: []
|
104
|
-
|
83
|
+
has_rdoc:
|