summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-20 00:36:55 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-20 00:36:55 +0000
commit68354c350a278a565bc3b2b3ba793b8a9dcd2712 (patch)
tree7a35a520c4c6ca5a6661357d6a3668b8769d7e59 /lib
parent825a1e939bd85e19d5a3de0411aa1fa6f23e0e99 (diff)
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')
-rw-r--r--lib/prime.rb4
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