primes-utils 1.0.6 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|