primes-utils 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c974a531ffdb56d1907751ff2df0c5f451105c2
4
- data.tar.gz: b9616c2850ded0be6a1cd23b58f2b5b4be1cf97c
3
+ metadata.gz: 6395f48acbfe0ee860220c35690d48b9c45aa045
4
+ data.tar.gz: 16150fa85ec9bf964012c59f04257e76665ddb79
5
5
  SHA512:
6
- metadata.gz: 828be099bf80cc65d68f4d64ba6e1ce338dc7eff05eec21d6c4d9767a2880062d6905e1bcb2bcdca8b48ce2ae1a400d20769c7be127334ecc5a8f63f39d804d0
7
- data.tar.gz: fa374d9ac9276859bfed141be5bcc160c907c999683d6ab5fa2a64448cea28ca393e52d67af0c5a83dd8aeb349b2cf9ae7d9b24824cf28d22cfdcd09245a8591
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.
@@ -1,5 +1,5 @@
1
1
  module Primes
2
2
  module Utils
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.4"
4
4
  end
5
5
  end
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 < 14
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
- return primes.select {|p| p >= start_num && p <= num} if num <= 13
172
+ mod = primes.reduce(:*) # P13 modulus value 2*3*5*7*11*13
171
173
 
172
- mod = 30030 # P13 modulus value 2*3*5*7*11*13
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 <= 13 ? primes.drop_while {|p| p < start_num} : []
206
- k = start_num / mod
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.3
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-02 00:00:00.000000000 Z
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