Created
August 30, 2013 00:57
-
-
Save broguinn/6385225 to your computer and use it in GitHub Desktop.
prime
This file contains 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
def is_prime?(number) | |
if number < 2 || !(number.is_a?(Integer)) | |
false | |
else | |
(2..((number ** 0.5).floor)).all? { |possible| number % possible != 0 } ? true : false | |
end | |
end | |
def prime(number) | |
if number < 1 || !(number.is_a?(Integer)) | |
raise TypeError.new "the number given must be an integert greater than zero" | |
end | |
primes = [] | |
potential_prime = 2 | |
while primes.length < number do | |
primes << potential_prime if is_prime?(potential_prime) | |
potential_prime += 1 | |
end | |
primes[-1] | |
end |
This file contains 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 'rspec' | |
require 'prime' | |
describe 'is_prime?' do | |
it 'returns false for ineligible numbers' do | |
is_prime?(-3).should be_false | |
is_prime?(0).should be_false | |
is_prime?(1).should be_false | |
is_prime?(1.5).should be_false | |
end | |
it 'tells if a number is prime or not' do | |
is_prime?(3).should be_true | |
is_prime?(6).should be_false | |
end | |
end | |
describe 'prime' do | |
it 'raises an exception if the input is not an integer greater than 0' do | |
expect { prime(0) }.to raise_exception | |
end | |
it 'returns an nth prime number' do | |
prime(100).should eq 541 | |
prime(10_001).should eq 104743 | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment