From: Peter Hickman Date: 2012-04-13T22:09:59+09:00 Subject: Re: Arguments with Funktion Firstly argument a is not needed as you do not use it. Secondly there are several prime numbers between 2 and 50 so you should be returning a list. Here is a quick hack of your code b = 50 # ARGV def prime(b) prime_numbers = Array.new for i in 2..b f=true for p in 2...i if i%p==0 f = false break end end prime_numbers << i if f end prime_numbers end sushu=prime(b) p "the prime between 2 and #{b} are #{sushu.inspect}." How lets make it a bit more Rubyish and readable... def prime(upper_limit) prime_numbers = Array.new (2..upper_limit).each do |number_to_check| is_a_prime_number = true (2...number_to_check).each do |factor| if number_to_check % factor == 0 is_a_prime_number = false break end end prime_numbers << number_to_check if is_a_prime_number end prime_numbers end Now lets mix in Jan E. suggested code def prime(upper_limit) prime_numbers = Array.new 2.upto upper_limit do |number_to_check| prime_numbers << number_to_check unless (2...number_to_check).any? {|factor| number_to_check % factor == 0} end prime_numbers end Actually there are better ways to check for prime numbers between a and b (hint: 2 is the only *even* prime, why are you even looking at any others?)