summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-09 02:45:31 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-09 02:45:31 +0000
commit3ed18fa8173b9efc7820eba8218eed4c25747fe3 (patch)
tree37a9326be207e9d96f56a0fe77ff2fc46099b6c7
parent0d3591f250bfe90805cac3c2d5bbfcadb720df37 (diff)
* lib/matrix.rb: Simplify and optimize EratosthenesSieve
based on patch by Ajay Kumar. [Fixes GH-921] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--lib/prime.rb7
2 files changed, 7 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 0323379a93..f4626e37c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jun 9 11:45:00 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Simplify and optimize EratosthenesSieve
+ based on patch by Ajay Kumar. [Fixes GH-921]
+
Mon Jun 8 05:09:58 2015 Koichi Sasada <ko1@atdot.net>
* gc.c (obj_info): print method id for T_IMEMO/ment.
diff --git a/lib/prime.rb b/lib/prime.rb
index cf5141e1a6..822f0f3ac0 100644
--- a/lib/prime.rb
+++ b/lib/prime.rb
@@ -425,13 +425,10 @@ class Prime
root = Integer(Math.sqrt(segment_max).floor)
sieving_primes = @primes[1 .. -1].take_while { |prime| prime <= root }
- offsets = Array.new(sieving_primes.size) do |i|
- (-(segment_min + 1 + sieving_primes[i]) / 2) % sieving_primes[i]
- end
segment = ((segment_min + 1) .. segment_max).step(2).to_a
- sieving_primes.each_with_index do |prime, index|
- composite_index = offsets[index]
+ sieving_primes.each do |prime|
+ composite_index = (-(segment_min + 1 + prime) / 2) % prime
while composite_index < segment.size do
segment[composite_index] = nil
composite_index += prime