Проблема в том, что вы запускаете код внутри класса.Внутри класса prime?
определяется как метод экземпляра класса, однако, когда вы запускаете цикл for внутри класса, который вы вызываете prime?
, как если бы это был метод класса (он же статический метод).Чтобы исправить это, просто удалите объявления классов:
def prime?(num)
if num == 1 then
return false
end
range = Math.sqrt(num)
for i in 2..range
if num%i == 0
return false
end
end
# Note: moved return true to here since otherwise it would return
# true after a single iteration
return true
end
lcm = 1
for j in 1..20 do
if prime?(j)
lcm *= j
end
end
puts lcm
Вы также можете определить prime?
более "Ruby-ish" способом:
def prime? num
if num == 1
false
else
(2..Math.sqrt(num)).all? { |i| i % num != 0 }
end
end
Документация для перечислимых # все?