faster_prime 1.0.0 → 1.0.2
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.
- checksums.yaml +4 -4
- data/Gemfile +6 -2
- data/README.md +2 -0
- data/faster_prime.gemspec +1 -6
- data/lib/faster_prime/base.rb +44 -0
- data/lib/faster_prime/primality_test.rb +3 -3
- data/lib/faster_prime/sieve.rb +4 -1
- data/lib/faster_prime/version.rb +3 -0
- data/lib/faster_prime.rb +1 -44
- metadata +6 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc920ccbdf79248776827937fc3e6c8e346e206a50b7849e182037ff5b5659ca
|
4
|
+
data.tar.gz: 36f8dc82146711ab31305c6e4ec0ae0fdbc2208f15bf3dd222a00cf2b635db37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fab8571c17be17bb574d08500faa1311707537831a3f6e6582629d8d4d6428803645816d87f34d91fccfbf0ff3a8bc92c73008dfa97e77821f5c7460d34e25e0
|
7
|
+
data.tar.gz: d10a6daeef8b85767dd7d0cbd30ade4b4fed52e47a63a5dd3de2c1d3e988aa938d53ca7dc5e5db622ec40d25a3aaaca012b8e118709c7985ef8223b76ec6cff2
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,8 @@ This is an alternative implementation to the standard `lib/prime.rb`. It is (al
|
|
8
8
|
* Replace `require "prime"` with `require "faster_prime"`.
|
9
9
|
* Replace `Prime` with `FasterPrime`.
|
10
10
|
|
11
|
+
If you want to use this without the core extension, you can use `require "faster_prime/base"` and `FasterPrime.prime?(num)` instead of `Integer#prime?`.
|
12
|
+
|
11
13
|
## Benchmark
|
12
14
|
|
13
15
|
### `Integer#prime?`
|
data/faster_prime.gemspec
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require "faster_prime"
|
1
|
+
require_relative "lib/faster_prime/version"
|
4
2
|
|
5
3
|
Gem::Specification.new do |spec|
|
6
4
|
spec.name = "faster_prime"
|
@@ -18,7 +16,4 @@ Gem::Specification.new do |spec|
|
|
18
16
|
spec.bindir = "exe"
|
19
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
18
|
spec.require_paths = ["lib"]
|
21
|
-
|
22
|
-
spec.add_development_dependency "bundler", "~> 1.16"
|
23
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
24
19
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "faster_prime/version"
|
2
|
+
require "faster_prime/utils"
|
3
|
+
require "faster_prime/primality_test"
|
4
|
+
require "faster_prime/prime_factorization"
|
5
|
+
require "faster_prime/sieve"
|
6
|
+
require "faster_prime/core_ext"
|
7
|
+
|
8
|
+
module FasterPrime
|
9
|
+
module Core
|
10
|
+
include Enumerable
|
11
|
+
|
12
|
+
class SuccEnumerator < Enumerator
|
13
|
+
alias succ next
|
14
|
+
end
|
15
|
+
|
16
|
+
def each(ubound = nil, &block)
|
17
|
+
return SuccEnumerator.new(Float::INFINITY) do |y|
|
18
|
+
Sieve.each(ubound) {|p| y << p }
|
19
|
+
end unless block_given?
|
20
|
+
|
21
|
+
Sieve.each(ubound, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def prime?(n)
|
25
|
+
raise ArgumentError, "Expected an integer, got #{ n }" unless n.respond_to?(:integer?) && n.integer?
|
26
|
+
PrimalityTest.prime?(n)
|
27
|
+
end
|
28
|
+
|
29
|
+
def prime_division(n)
|
30
|
+
PrimeFactorization.prime_factorization(n).to_a
|
31
|
+
end
|
32
|
+
|
33
|
+
def int_from_prime_division(pd)
|
34
|
+
pd.inject(1) {|v, (p, e)| v * (p ** e) }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.instance
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
include Core
|
43
|
+
extend Core
|
44
|
+
end
|
@@ -75,18 +75,18 @@ module FasterPrime
|
|
75
75
|
#
|
76
76
|
# (1) simplest
|
77
77
|
#
|
78
|
-
#
|
78
|
+
# APRCL.prime?(N) #=> true or false
|
79
79
|
#
|
80
80
|
# (2) reuse-table
|
81
81
|
#
|
82
|
-
# aprcl =
|
82
|
+
# aprcl = APRCL.new(B)
|
83
83
|
# aprcl.prime?(N1) #=> true or false
|
84
84
|
# aprcl.prime?(N2) #=> true or false
|
85
85
|
# aprcl.bound #=> upper bound (>= B)
|
86
86
|
#
|
87
87
|
# (3) manual-t (for test or debug)
|
88
88
|
#
|
89
|
-
# aprcl =
|
89
|
+
# aprcl = APRCP.new(B)
|
90
90
|
# aprcl.set_t(t)
|
91
91
|
# aprcl.prime?(N) #=> true or false
|
92
92
|
|
data/lib/faster_prime/sieve.rb
CHANGED
data/lib/faster_prime.rb
CHANGED
@@ -1,45 +1,2 @@
|
|
1
|
-
require "faster_prime/
|
2
|
-
require "faster_prime/primality_test"
|
3
|
-
require "faster_prime/prime_factorization"
|
4
|
-
require "faster_prime/sieve"
|
1
|
+
require "faster_prime/base"
|
5
2
|
require "faster_prime/core_ext"
|
6
|
-
|
7
|
-
module FasterPrime
|
8
|
-
VERSION = "1.0.0"
|
9
|
-
|
10
|
-
module Core
|
11
|
-
include Enumerable
|
12
|
-
|
13
|
-
class SuccEnumerator < Enumerator
|
14
|
-
alias succ next
|
15
|
-
end
|
16
|
-
|
17
|
-
def each(ubound = nil, &block)
|
18
|
-
return SuccEnumerator.new(Float::INFINITY) do |y|
|
19
|
-
Sieve.each(ubound) {|p| y << p }
|
20
|
-
end unless block_given?
|
21
|
-
|
22
|
-
Sieve.each(ubound, &block)
|
23
|
-
end
|
24
|
-
|
25
|
-
def prime?(n)
|
26
|
-
raise ArgumentError, "Expected an integer, got #{ n }" unless n.respond_to?(:integer?) && n.integer?
|
27
|
-
PrimalityTest.prime?(n)
|
28
|
-
end
|
29
|
-
|
30
|
-
def prime_division(n)
|
31
|
-
PrimeFactorization.prime_factorization(n).to_a
|
32
|
-
end
|
33
|
-
|
34
|
-
def int_from_prime_division(pd)
|
35
|
-
pd.inject(1) {|v, (p, e)| v * (p ** e) }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.instance
|
40
|
-
self
|
41
|
-
end
|
42
|
-
|
43
|
-
include Core
|
44
|
-
extend Core
|
45
|
-
end
|
metadata
CHANGED
@@ -1,43 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faster_prime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yusuke Endoh
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.16'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.16'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
|
+
dependencies: []
|
41
12
|
description: This provides `Integer#prime?`, `Integer#prime_division`, and `Prime#each`
|
42
13
|
that are almost compatible to and faster than `lib/prime.rb`.
|
43
14
|
email:
|
@@ -52,15 +23,16 @@ files:
|
|
52
23
|
- Rakefile
|
53
24
|
- faster_prime.gemspec
|
54
25
|
- lib/faster_prime.rb
|
26
|
+
- lib/faster_prime/base.rb
|
55
27
|
- lib/faster_prime/core_ext.rb
|
56
28
|
- lib/faster_prime/primality_test.rb
|
57
29
|
- lib/faster_prime/prime_factorization.rb
|
58
30
|
- lib/faster_prime/sieve.rb
|
59
31
|
- lib/faster_prime/utils.rb
|
32
|
+
- lib/faster_prime/version.rb
|
60
33
|
homepage: https://github.com/mame/faster_prime
|
61
34
|
licenses: []
|
62
35
|
metadata: {}
|
63
|
-
post_install_message:
|
64
36
|
rdoc_options: []
|
65
37
|
require_paths:
|
66
38
|
- lib
|
@@ -75,9 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
47
|
- !ruby/object:Gem::Version
|
76
48
|
version: '0'
|
77
49
|
requirements: []
|
78
|
-
|
79
|
-
rubygems_version: 2.7.3
|
80
|
-
signing_key:
|
50
|
+
rubygems_version: 3.7.0.dev
|
81
51
|
specification_version: 4
|
82
52
|
summary: A faster substitute for `lib/prime.rb`.
|
83
53
|
test_files: []
|