Actions
Feature #10354
closedOptimize Integer#prime?
Feature #10354:
Optimize Integer#prime?
Description
Nick Slocum shows in https://github.com/ruby/ruby/pull/736 that Integer#prime? can be optimized quite a bit.
First, that's because there are some basic things to avoid in the current lib, like needlessly capturing blocks and there's a useless loop do too.
I'm attaching a patch that fixes many of these things.
Even after these fixes applied, Nick's version is still faster and I don't see why we would not use it for Fixnum#prime?
For Bignum#prime?, since division costs more, we can go slightly faster with the following implementation:
class Integer
# Returns true if +self+ is a prime number, else returns false.
def prime?
return true if self == 2
return false if self % 2 == 0 || self % 3 == 0 || self < 2
skip_division = true
(5..(self**0.5).floor).step(2) do |i|
return false if skip_division && self % i == 0
skip_division = !skip_division
end
true
end
end
Files
Actions