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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ed371cae61edc695a59c5054e619ea5ad4e9db55aedd020f4f0cb4ecd5a2d0c
4
- data.tar.gz: b2bd47bf86e05d018bd526b91dd0b95e2a3b250fb3e7ea206acebd14179b1fd4
3
+ metadata.gz: dc920ccbdf79248776827937fc3e6c8e346e206a50b7849e182037ff5b5659ca
4
+ data.tar.gz: 36f8dc82146711ab31305c6e4ec0ae0fdbc2208f15bf3dd222a00cf2b635db37
5
5
  SHA512:
6
- metadata.gz: f7afb2a310eba71bcbbb296677265546b79f6528913ccff47cdfaca9377b482728f8949b3bdb62be085b69bb66fa38dffae0496689ef6447fde66f4c2d0d3c18
7
- data.tar.gz: a2353577ac4598150a9edf176f7590ab8d7875236ab284bf16f7876fb581c9d2fdfeb63d43bdb67a29e64d7efc6352def2ed5798d883051e66f390468259728a
6
+ metadata.gz: fab8571c17be17bb574d08500faa1311707537831a3f6e6582629d8d4d6428803645816d87f34d91fccfbf0ff3a8bc92c73008dfa97e77821f5c7460d34e25e0
7
+ data.tar.gz: d10a6daeef8b85767dd7d0cbd30ade4b4fed52e47a63a5dd3de2c1d3e988aa938d53ca7dc5e5db622ec40d25a3aaaca012b8e118709c7985ef8223b76ec6cff2
data/Gemfile CHANGED
@@ -1,5 +1,9 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
3
  gemspec
4
+
5
+ group :development do
6
+ gem "rake"
7
+ gem "simplecov"
8
+ gem "minitest"
9
+ end
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
- lib = File.expand_path("../lib", __FILE__)
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
- # Leonhard::APRCL.prime?(N) #=> true or false
78
+ # APRCL.prime?(N) #=> true or false
79
79
  #
80
80
  # (2) reuse-table
81
81
  #
82
- # aprcl = Leonhard::APRCL.new(B)
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 = Leonhard::APRCP.new(B)
89
+ # aprcl = APRCP.new(B)
90
90
  # aprcl.set_t(t)
91
91
  # aprcl.prime?(N) #=> true or false
92
92
 
@@ -25,7 +25,10 @@ module FasterPrime
25
25
 
26
26
  def each(ubound = nil, &blk)
27
27
  if ubound && SMALL_PRIMES.last >= ubound
28
- SMALL_PRIMES.each(&blk)
28
+ SMALL_PRIMES.each do |n|
29
+ break if n > ubound
30
+ yield n
31
+ end
29
32
  return
30
33
  end
31
34
 
@@ -0,0 +1,3 @@
1
+ module FasterPrime
2
+ VERSION = "1.0.2"
3
+ end
data/lib/faster_prime.rb CHANGED
@@ -1,45 +1,2 @@
1
- require "faster_prime/utils"
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.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: 2018-01-25 00:00:00.000000000 Z
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
- rubyforge_project:
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: []