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