prime_methods 0.0.1 → 0.0.4

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.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/lib/prime_methods.rb +35 -2
  3. metadata +4 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 07fbaee89b65b4aa6453dcb9eda40584742d4b31
4
- data.tar.gz: da004943f89def047a85de951e2c41e7f5204f3b
2
+ SHA256:
3
+ metadata.gz: 8974d423deef638427fda163831284fe35f1bdbeca8461cd04164d3308a91e48
4
+ data.tar.gz: a69774c5c90a1d0ad40a143d0b1e8eee4db2bed733ed29efe93b3c1790945a1e
5
5
  SHA512:
6
- metadata.gz: 0fdd4b646337e51e001236e996ebd48c7c984a87b22a932ee6901c42cc6f3154b5d3361cbcd31688b9b3fc0602086ac95426c86539eac5715a0baee56cbc6128
7
- data.tar.gz: f6a069e0f4375e9a946d891316ffa145a51d685ade325c9dc0e74e300debc4c096854c4c4cc2449d5c1a967345c7e6dd954efac96edb0ebbf843cf3725f5c302
6
+ metadata.gz: b73c5eea468b47a46f8be48f2de20141052abb80311dbc75c785365665a577b1495bcc401b83bf7e6283bb62a20dc077f0e7d6cf82182d41127bedc46c28c2e7
7
+ data.tar.gz: 6820bd49b640e64e24ed119deeff64d1bc4797c944e9d564a6ac09a364c23dc8d783038150b6a7e02695dd2fb87a9e35c8be86eab68786fd53b97f9d192e11cb
data/lib/prime_methods.rb CHANGED
@@ -52,7 +52,7 @@ class Integer
52
52
  end
53
53
 
54
54
  def minimal_strong_jacobi( a = 0 )
55
- if self < 2 then return [0, 0] end
55
+ return [0, 0] if self < 2
56
56
  return [0, 0] if is_square?
57
57
  if a < 2 then
58
58
  return [0, -1] if self % 4 == 3
@@ -90,7 +90,7 @@ class Integer
90
90
  s, t = ( s * ( a * s + 2 * t ) ) % self, ( ( t - s ) * ( t + s ) ) % self
91
91
  s, t = ( 2 * a * s + 2 * t ) % self, ( -2 * s ) % self if chr == "1"
92
92
  end
93
- s % self == 0 && t == ( 2 * jacobi_symbol( 2 * ( a + 2 ) ) ) % self
93
+ s % self == 0 && t == ( 2 * jacobi_symbol( 2 * ( a + 2 ) ) ) % self
94
94
  end
95
95
 
96
96
  def next_prime
@@ -101,4 +101,37 @@ class Integer
101
101
  n
102
102
  end
103
103
 
104
+ def factor
105
+ n = self.abs
106
+ return nil if n == 0
107
+ return 1 if n == 1
108
+ return 2 if n.even?
109
+ return 5 if n % 5 == 0
110
+ return n if n.is_prp? && n.is_fu?
111
+ a, d = 1, n
112
+ while d == n
113
+ a += 1
114
+ s, t, d = a, a, 1
115
+ while d == 1 do
116
+ s = ( s * s + 1 ) % n
117
+ t = ( t ** 4 + 2 * t * t + 2 ) % n
118
+ d = n.gcd( ( s - t ).abs )
119
+ end
120
+ end
121
+ d
122
+ end
123
+
124
+ def factorize
125
+ n = self.abs
126
+ return [ ] if n == 0
127
+ return [1] if n == 1
128
+ r = []
129
+ while n != 1 do
130
+ f = n.factor
131
+ r << f
132
+ n = n / f
133
+ end
134
+ r.sort
135
+ end
136
+
104
137
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prime_methods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Underwood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-07 00:00:00.000000000 Z
11
+ date: 2020-02-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Adds to Integer class: trial_factor, is_prp?(b=2), is_square?, jacobi_symbol,
14
- minimal_strong_jacobi(a=0), is_fu?, is_bpsw2?, next_prime'
14
+ minimal_strong_jacobi(a=0), is_fu?, is_bpsw2?, next_prime, factor, factorize'
15
15
  email: paulunderwood@mindless.com
16
16
  executables: []
17
17
  extensions: []
@@ -37,8 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubyforge_project:
41
- rubygems_version: 2.5.2.1
40
+ rubygems_version: 3.0.3
42
41
  signing_key:
43
42
  specification_version: 4
44
43
  summary: Adds prime number methods to Integer class