primes-utils 1.0.5 → 1.0.6
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.
- data/README.md +21 -19
- data/lib/primes/utils.rb +4 -4
- data/lib/primes/utils/version.rb +1 -1
- metadata +71 -49
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -40,7 +40,7 @@ Miller-Rabin here is super fast, but probabilistic (not deterministic), primalit
|
|
40
40
|
https://en.wikipedia.org/wiki/Miller-Rabin_primality_test
|
41
41
|
The method's reliability can be increased by increasing the default input parameter of k=20.
|
42
42
|
```
|
43
|
-
1111111111111111111.primemr?
|
43
|
+
1111111111111111111.primemr? => true
|
44
44
|
1111111111111111111.primemr? 50 => true
|
45
45
|
1111111111111111111.primemr?(50) => true
|
46
46
|
11111111111111111111.primemr? => false
|
@@ -53,11 +53,11 @@ Determine the prime factorization of the absolute value of an integer.
|
|
53
53
|
This replaces the `prime division` method in the `prime.rb` standard library.
|
54
54
|
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
55
|
Default Strictly Prime (SP) Prime Generator (PG) used here is P13.
|
56
|
-
Can change SP PG used on input.
|
56
|
+
Can change SP PG used on input. Acceptable primes range: [3 - 19].
|
57
57
|
```
|
58
58
|
1111111111111111111.prime_division => [[1111111111111111111, 1]]
|
59
59
|
11111111111111111111.prime_division => [[11, 1], [41, 1], [101, 1], [271, 1], [3541, 1], [9091, 1], [27961, 1]]
|
60
|
-
123456789.factors
|
60
|
+
123456789.factors => [[3, 2], [3607, 1], [3803, 1]]
|
61
61
|
123456789.factors 17 => [[3, 2], [3607, 1], [3803, 1]]
|
62
62
|
123456789.factors(17) => [[3, 2], [3607, 1], [3803, 1]]
|
63
63
|
-12345678.factors => [[2, 1], [3, 2], [47, 1], [14593, 1]]
|
@@ -65,30 +65,32 @@ Can change SP PG used on input. Acceptable range are primes from 3 - 19.
|
|
65
65
|
1.factors => []
|
66
66
|
```
|
67
67
|
**primes(start_num=0)**
|
68
|
-
Create an array of primes from the range start_num - end_num.
|
69
|
-
The order of the range doesn't matter if both given:
|
68
|
+
Create an array of primes from the absolute value range (|start_num| - |end_num|).
|
69
|
+
The order of the range doesn't matter if both given: start.primes end <=> end.prime start
|
70
70
|
If only one parameter used, then all the primes upto that number will be returned.
|
71
71
|
```
|
72
|
-
50.primes
|
73
|
-
50.primes 125
|
74
|
-
300.primes 250
|
75
|
-
541.primes.size
|
76
|
-
1000.primes(5000).size
|
77
|
-
(prms = 1000000.primes(1000100)).size
|
78
|
-
prms.size
|
79
|
-
prms
|
72
|
+
50.primes => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
|
73
|
+
50.primes 125 => [53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113]
|
74
|
+
300.primes 250 => [251, 257, 263, 269, 271, 277, 281, 283, 293]
|
75
|
+
541.primes.size => 100
|
76
|
+
1000.primes(5000).size => 501
|
77
|
+
(prms = 1000000.primes(1000100)).size => 6
|
78
|
+
prms.size => 6
|
79
|
+
prms => [1000003, 1000033, 1000037, 1000039, 1000081, 1000099]
|
80
80
|
-10.primes -50 => [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
|
81
|
+
0.primes => []
|
82
|
+
1.primes => []
|
81
83
|
```
|
82
84
|
**primenth(p=11) or nthprime(p=11)**
|
83
85
|
Return the value of the nth (absolute value) prime.
|
84
86
|
Default Strictly Prime (SP) Prime Generator (PG) used here is P11.
|
85
|
-
Can change SP PG used on input.
|
87
|
+
Can change SP PG used on input. Acceptable primes range: [3 - 19].
|
86
88
|
```
|
87
|
-
1000000.primenth
|
88
|
-
1500000.nthprime
|
89
|
-
2000000.nthprime 13
|
90
|
-
-500000.nthprime
|
91
|
-
0.nthprime
|
89
|
+
1000000.primenth => 15485863
|
90
|
+
1500000.nthprime => 23879519
|
91
|
+
2000000.nthprime 13 => 32452843l
|
92
|
+
-500000.nthprime => 7368787
|
93
|
+
0.nthprime => 0
|
92
94
|
```
|
93
95
|
## Coding Implementations
|
94
96
|
The methods `primemr`, `nthprime/primenth`, and `primes` are coded in pure ruby.
|
data/lib/primes/utils.rb
CHANGED
@@ -40,7 +40,7 @@ module Primes
|
|
40
40
|
47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103,
|
41
41
|
107, 109, 113, 127, 131, 137, 139, 149, 151, 157,163,
|
42
42
|
167, 173, 179, 181, 191, 193, 197, 199, 211].include? n
|
43
|
-
return false if
|
43
|
+
return false if !residues.include?(n%mod) or n == 1
|
44
44
|
|
45
45
|
sqrtN = Math.sqrt(n).to_i
|
46
46
|
p=11 # first test prime pj
|
@@ -160,7 +160,7 @@ module Primes
|
|
160
160
|
# If start_num > self, values are switched to continue
|
161
161
|
# Output is an array of the primes within the given range
|
162
162
|
# To find count of these primes do: end_num.primes(start_num).size
|
163
|
-
# This method uses the P13 Strictly Prime (SP) Prime Generator
|
163
|
+
# This method uses the P13 Strictly Prime (SP) Prime Generator (PG)
|
164
164
|
|
165
165
|
num = self.abs; start_num = start_num.abs
|
166
166
|
num, start_num = start_num, num if start_num > num
|
@@ -205,8 +205,8 @@ module Primes
|
|
205
205
|
primes = start_num <= plast ? primes.drop_while {|p| p < start_num} : []
|
206
206
|
k = (start_num-2).abs/mod # start_num's residue group value
|
207
207
|
modk = mod*k # start_num's mod group value
|
208
|
-
m = rescnt*k # number of prms elements
|
209
|
-
r = 0 # begin
|
208
|
+
m = rescnt*k # number of prms elements up to kth resgroup
|
209
|
+
r = 0 # begin processing 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]
|
data/lib/primes/utils/version.rb
CHANGED
metadata
CHANGED
@@ -1,51 +1,63 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: primes-utils
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 6
|
10
|
+
version: 1.0.6
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Jabari Zakiya
|
8
|
-
autorequire:
|
14
|
+
autorequire:
|
9
15
|
bindir: exe
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
|
18
|
+
date: 2015-04-03 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
14
21
|
name: bundler
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.9'
|
20
|
-
requirement: !ruby/object:Gem::Requirement
|
21
|
-
requirements:
|
22
|
-
- - "~>"
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version: '1.9'
|
25
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"
|
26
33
|
type: :development
|
27
|
-
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
28
36
|
name: rake
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
requirement: !ruby/object:Gem::Requirement
|
35
|
-
requirements:
|
36
|
-
- - "~>"
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: '10.0'
|
39
37
|
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"
|
40
48
|
type: :development
|
41
|
-
|
42
|
-
|
49
|
+
version_requirements: *id002
|
50
|
+
description: "Methods: prime?, primemr?, primes, nthprime/primenth, factors/prime_division"
|
51
|
+
email:
|
43
52
|
- jzakiya@gmail.com
|
44
53
|
executables: []
|
54
|
+
|
45
55
|
extensions: []
|
56
|
+
|
46
57
|
extra_rdoc_files: []
|
47
|
-
|
48
|
-
|
58
|
+
|
59
|
+
files:
|
60
|
+
- .gitignore
|
49
61
|
- CODE_OF_CONDUCT.md
|
50
62
|
- Gemfile
|
51
63
|
- README.md
|
@@ -57,26 +69,36 @@ files:
|
|
57
69
|
- primes-utils.gemspec
|
58
70
|
homepage: https://github.com/jzakiya/primes-utils
|
59
71
|
licenses: []
|
60
|
-
|
61
|
-
post_install_message:
|
72
|
+
|
73
|
+
post_install_message:
|
62
74
|
rdoc_options: []
|
63
|
-
|
75
|
+
|
76
|
+
require_paths:
|
64
77
|
- lib
|
65
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
-
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
67
81
|
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
|
70
|
-
|
71
|
-
|
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:
|
72
90
|
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
75
96
|
requirements: []
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
97
|
+
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.8.25
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
80
102
|
summary: suite of extremely fast utility methods for testing and generating primes
|
81
103
|
test_files: []
|
82
|
-
|
104
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 18a37c98fc792d7d1aa0097b9e638866423ceeba
|
4
|
-
data.tar.gz: b20fe5ee45d3d9f9d7d4ead6e5adc9e390cd066f
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 9c3cb7bfa4e8fe537b56fcf13dcfad505802637537612fe601b75a0214eb0727e80c23f008d7785b7a180a08d8d52841cb8e9de913c465a015d26561ed2e4172
|
7
|
-
data.tar.gz: fafd267291075190e65fb8250f133c37002aa6a503ef0c230c83acc03c529136ff26689ce4afa99400ef7251d081895bb7e12149946d812641217c0356a210f4
|