primes-utils 2.5.1 → 2.6.0

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: 7bc5495497089b070f595b0456a1b0c00da065d8
4
- data.tar.gz: fd32d881956306de64948f69171909bb4f65843c
3
+ metadata.gz: 43371077c9ef9173d24033c811151c290b8ae381
4
+ data.tar.gz: 6c1f1e13987dfe96194589646bd0923f563de871
5
5
  SHA512:
6
- metadata.gz: 12b152e50667e3646c92104e22f61cfb5e2f028d452a1fc6dc9c6eeb638dbdbe044aaab23086aa17cedd18d27188063a4293efcff1520be7ec363272c1bb06b4
7
- data.tar.gz: faa16320abef1a7f78e3c5c4fa4e76a90b784ee8a3b66c9597e89dd8bab5d15dbbd1bb588f3ba88205688cd7007202a7167fd57001b0ec7c6f47debc23df4e0e
6
+ metadata.gz: e2e56490823fa11298cbffd0249286405b9df64474786f8789cdb1ae3792be4b4228f29ad260e537b669710a1f1947728e73a8c709cd6d2954839ef55175228a
7
+ data.tar.gz: 406d1c0bf6ed02fa0baa6a58eca6db05de476d8ff450c8c027782f0489ebd87a8921a26e57c81042eaab9f0d11ee3be1ac374710c5b547c4ef91b8848a9a93fc
data/README.md CHANGED
@@ -135,9 +135,9 @@ n=10**8; (25*n).primescnt => 121443371
135
135
  **primenth(p=7) or nthprime(p=7)**
136
136
 
137
137
  Return the value of the (absolute value of) nth prime.
138
- Default Strictly Prime (SP) Prime Generator (PG) used here is P7.
138
+ Default Strictly Prime (SP) Prime Generator (PG) is adaptively selected.
139
139
  Can change SP PG used on input. Acceptable primes range: [3 - 13].
140
- Indexed nth primes now upto 1.6 billionth.
140
+ Indexed nth primes now upto 2.01 billionth.
141
141
  Also see `Error Handling`.
142
142
 
143
143
  ```
@@ -157,7 +157,7 @@ Displays a list of all the `primes-utils` methods available for your system.
157
157
  Use as `n.primes_utils` where n is any `class Integer` value.
158
158
 
159
159
  ```
160
- 0.primes_utils => "prime? primemr? primes primesf primesmr primescnt primescntf primescntmr primenth|nthprime factors|prime_division"
160
+ 0.primes_utils => "prime? primemr? primes primesf primesmr primescnt primescntf primescntmr primenth|nthprime factors|prime_division primes_utils"
161
161
  ```
162
162
 
163
163
  ## Error Handling
@@ -193,6 +193,7 @@ All the `primes-utils` methods are `instance_methods` for `class Integer`.
193
193
 
194
194
  ## History
195
195
  ```
196
+ 2.6.0 – much, much better adaptive pg selection algorithm used in select_pg
196
197
  2.5.1 – corrected minor error in select_pg
197
198
  2.5.0 – 9 more index primes under the 110-millionth in nths; fixed Ruby 1.8 incompatibility in primes;
198
199
  better|simpler technique for select_pg, significant speed increases for large ranges; used now
data/lib/primes/utils.rb CHANGED
@@ -359,7 +359,7 @@ module Primes
359
359
  end
360
360
  end
361
361
  # determine prms array parameters and starting location value m for start_num
362
- split_arrays ? (prms = prms_range; maxprms = max_range; m=0) : m=pcs2start
362
+ split_arrays ? (prms = prms_range; maxprms = max_range; m=0) : m = pcs2start
363
363
  [prms, m, modks, residues, rescnt, pcs2start, maxprms, rs] # parameters output
364
364
  end
365
365
 
@@ -444,10 +444,20 @@ module Primes
444
444
  end
445
445
 
446
446
  def select_pg(num, start_num) # adaptively select PG
447
- range_size = num - start_num
448
- primes = [2, 3, 5] # use P5 for small ranges
449
- primes << 7 if range_size > 35*10**5 # use P7 for midsize ranges
450
- primes << 11 if range_size > 850*10**5 # use P11 for large ranges
447
+ range = num - start_num
448
+ pg = 5
449
+ if start_num <= Math.sqrt(num).to_i # for one array of primes upto N
450
+ pg = 7 if num > 50*10**4
451
+ pg = 11 if num > 305*10**5
452
+ else # for split array cases
453
+ pg = 7 if ((10**6...10**7).cover? range and start_num < 10**8) or
454
+ ((10**7...10**8).cover? range and start_num < 10**10) or
455
+ ((10**8...10**9).cover? range and start_num < 10**12) or
456
+ (range >= 10**9 and start_num < 10**14)
457
+ pg = 11 if ((10**8...10**9).cover? range and start_num < 10**10) or
458
+ (range >= 10**9 and start_num < 10**11)
459
+ end
460
+ primes = [2,3,5,7,11,13].select! {|p| p <= pg}
451
461
  [primes, primes.reduce(:*)] # [excluded primes, mod] for PG
452
462
  end
453
463
 
@@ -1,5 +1,5 @@
1
1
  module Primes
2
2
  module Utils
3
- VERSION = "2.5.1"
3
+ VERSION = "2.6.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: primes-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.0
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-12-03 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler