user7651252
user7651252

Reputation:

Trying to figure out if user input is prime or not with ruby

I am new to Ruby and just read about methods and such I have been working on a program in order to get the user to type in a number and determine if it is prime or not. This is what I have so far.

print "Enter a number: "
num = gets.chomp

def prime(n)
  factors = []

  if num < 2
    puts "#{num} is a prime number"
  end

  while n % num == 0 and num < n
    factors.push(num)
    num += 1
  end

  return factors
end

Not even sure if I'm on the right track. Really lost. Any help would be greatly appreciated!

Upvotes: 0

Views: 135

Answers (4)

Alexander Taborda
Alexander Taborda

Reputation: 816

require 'prime'
print "Enter a number: "
num = gets.chomp

Prime.prime?(n)

Or, from the scratch:

def prime?(n)
  if n > 1
    min_condition = Math.sqrt(n).to_i  # The highest factor is necessary at most sqrt(n)
    factors = 0
    (1..min_condition).step(2).each do |i| # It's not necessary to check even numbers
      factors += 1 if (n.to_f / i) % 1 == 0
      break if factors > 1 # If the algorithm find 2 factors, the number isn't prime
    end
    !(factors > 1)
  else
    false
  end
end

Upvotes: 2

Michael Kohl
Michael Kohl

Reputation: 66837

I know that you're doing this to learn Ruby, but keep in mind that you can just use Prime.prime? to determine whether or not a number is prime.

require 'prime'

Prime.prime?(3)
#=> true 
Prime.prime?(4)
#=> false

As for your actual problem, you use both num and n inside your method, but num is defined outside, so won't be in scope. Also: you never seem to actually be calling prime.

Upvotes: 1

Divyang Hirpara
Divyang Hirpara

Reputation: 998

If you don't want to use ruby base library than below code is useful for you

print "Enter a number: "
num = gets.chomp

def check_prime_number(num)
 num = num.to_i
 n = 1
 factors = []

 while (num >= n ) do
    if  (num % n == 0 )
        factors << n unless factors.include?(n)
    end
    n += 1
 end
 if ( factors.size > 2)
    puts "Factors of number #{num} :-> #{factors}" 
 elsif num > 0
    puts "#{num} is prime"
 end
end

check_prime_number(num)

Try if its helpful for you.

Upvotes: 0

Dung Pham
Dung Pham

Reputation: 95

There are some problems with your program:

  1. You want to get the user to type in a number and determine if it is prime or not but the output of your method prime doesn't answer this question. It will return an array.

  2. If a number is less then 2, it is not a prime number (wikipedia), so this piece of your code is wrong:

if num < 2
  puts "#{num} is a prime number"
end
  1. There are plenty of ways to check if a number is a prime number or not, this topic may help you to implement with Ruby.

Upvotes: 0

Related Questions