I'm just learning Ruby :) and Im trying to create a simple prime-number program where all the primes of a number are printed.
I'm getting errors where the prime and nonprime numbers are mixed up (ie: input of 9 will get you all nonprimes).
I also want my program to print out a list of factors (including duplicates), as well as the unique set of factors in ascending order. Any tips on how I should code this?
I'm sorry for such a beginner question - I'm struggling alot and need some help :)
puts "Enter a number please "
num = gets.chomp.to_i
i = 2
number = 2
while i < num
if number % i == 0
prime = false
end
i = 1
end
if prime == true
puts "#{number} is prime"
else
puts "#{number} is not prime"
end
number = 1
end
CodePudding user response:
while i < num
if number % i == 0
prime = false
end
i = 1
end
# ...
It looks like that first end
is meant to be an else
.
It's easier to catch these things when you simplify your code, e.g. this method reduces to this (although there are other issues with it):
i = 2
number = 2
while i < num
(number % i).zero? ? prime = false : i = 1
puts "#{number} is #{'not ' unless prime}prime"
number = 1
end
CodePudding user response:
End error is because of else
while i < num
if number % i == 0
prime = false
else
i = 1
end
if you have a short If - neater is writing it like:
if-condition ? 1 : 0
and in your case while is.. not the nicest choice - you should use range
(1...3).map{|x| puts(x) }
{} - allows multiline(with do end end)
this prints [1,2]
(1..3).map{|x| x*2 }
would be [2,4,9]
This should be enough hints of how to play around with your code without ruining the process.