Last active
December 26, 2015 19:39
-
-
Save jmromer/7202472 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Integer | |
def is_prime? | |
return false if self < 2 | |
(2..Math::sqrt(self)).each do |i| | |
return false if self % i == 0 | |
end | |
return true | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark' | |
class Integer | |
def is_prime_v0? | |
return false if self < 2 | |
(2...self).each { |i| return false if self % i == 0 } | |
return true | |
end | |
def is_prime_v1? | |
return false if self < 2 | |
(2..Math::sqrt(self)).each { |i| return false if self % i == 0 } | |
return true | |
end | |
def is_prime_v2? | |
return false if self < 2 | |
i = 2 | |
while i*i <= self do | |
return false if self % i == 0 | |
i += 1 | |
end | |
return true | |
end | |
def is_prime_v3? | |
return true if self == 2 | |
return false if (self < 2) || (self % 2 == 0) | |
i = 3 | |
while i*i <= self do | |
return false if self % i == 0 | |
i += 2 | |
end | |
return true | |
end | |
end | |
trial_num = 1 | |
[10, 25, 50, 75, 100, 500, 1000, 20000].each do |n| | |
puts "\n\nTrial #{trial_num} (n = #{n}) :\n" | |
Benchmark.bmbm do |x| | |
x.report("v0: all to n:") { for i in 1..n; i.is_prime_v0?; end } | |
x.report("v1: all to sqrt-n:") { for i in 1..n; i.is_prime_v1?; end } | |
x.report("v2: all to n by n^2:") { for i in 1..n; i.is_prime_v2?; end } | |
x.report("v3: by n^2, skipping:") { for i in 1..n; i.is_prime_v3?; end } | |
end | |
trial_num += 1 | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment