Keren
Keren

Reputation: 217

Prime number checker always returns true

I'm been given an assignment to create a method that takes an integer and returns true if it is prime and false if it is not. The code I wrote below is not returning false for non-prime numbers. Any ideas?

def prime?(integer)
  (2...integer).each do |divisor| 
    if integer % divisor == 0
      return false
    else
      return true
    end
  end
end

Upvotes: 2

Views: 107

Answers (1)

rohit89
rohit89

Reputation: 5773

Your else condition kicks in immediately if it is not divisible by any divisor. You need to move it outside the loop.

def prime? (integer)
  (2...integer).each do |divisor| 
    if integer % divisor == 0
     return false
    end
  end
  true
end

One-liner with none? (thanks sawa)

(2...integer).none? {|i| integer % i == 0}

Upvotes: 7

Related Questions