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 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
- 0.prime? => false
35
- 1.prime? => false
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
- **factors(p=13) or prime_division(p=13)**
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
- **primes(start_num=0)**
68
- Create an array of primes from the absolute value range (|start_num| - |end_num|).
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
@@ -1,5 +1,5 @@
1
1
  module Primes
2
2
  module Utils
3
- VERSION = "1.0.6"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
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 = 22*n # approx value need to check primes up to
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
- hash: 27
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
- date: 2015-04-03 00:00:00 Z
19
- dependencies:
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
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
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
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 35
44
- segments:
45
- - 10
46
- - 0
47
- version: "10.0"
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
- version_requirements: *id002
50
- description: "Methods: prime?, primemr?, primes, nthprime/primenth, factors/prime_division"
51
- email:
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
- files:
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
- none: false
80
- requirements:
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
81
68
  - - ">="
82
- - !ruby/object:Gem::Version
83
- hash: 3
84
- segments:
85
- - 0
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
- hash: 3
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: 1.8.25
78
+ rubygems_version: 2.4.6
100
79
  signing_key:
101
- specification_version: 3
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: