diff options
author | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-20 00:36:55 +0000 |
---|---|---|
committer | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-20 00:36:55 +0000 |
commit | 68354c350a278a565bc3b2b3ba793b8a9dcd2712 (patch) | |
tree | 7a35a520c4c6ca5a6661357d6a3668b8769d7e59 /lib/prime.rb | |
parent | 825a1e939bd85e19d5a3de0411aa1fa6f23e0e99 (diff) | |
download | ruby-68354c350a278a565bc3b2b3ba793b8a9dcd2712.tar.gz |
lib/prime: Fix primality of some large integers [#13492].
* lib/prime.rb: Use accurate sqrt to insure all factors are tested.
Patch by Marcus Stollsteimer.
* test/test_prime.rb: Adapt test for timeout
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58809 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/prime.rb')
-rw-r--r-- | lib/prime.rb | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/prime.rb b/lib/prime.rb index ab9e05b2fe..86db1957a3 100644 --- a/lib/prime.rb +++ b/lib/prime.rb @@ -35,7 +35,7 @@ class Integer return self >= 2 if self <= 3 return true if self == 5 return false unless 30.gcd(self) == 1 - (7..Math.sqrt(self).to_i).step(30) do |p| + (7..Integer.sqrt(self)).step(30) do |p| return false if self%(p) == 0 || self%(p+4) == 0 || self%(p+6) == 0 || self%(p+10) == 0 || self%(p+12) == 0 || self%(p+16) == 0 || self%(p+22) == 0 || self%(p+24) == 0 @@ -445,7 +445,7 @@ class Prime segment_min = @max_checked segment_max = [segment_min + max_segment_size, max_cached_prime * 2].min - root = Integer(Math.sqrt(segment_max).floor) + root = Integer.sqrt(segment_max) segment = ((segment_min + 1) .. segment_max).step(2).to_a |