2016-05-29 3 views
0

Я пытаюсь написать метод, который возвращает true или false в зависимости от того, является ли вычисляемое целое число простым или нет. Следующий код - это то, что я объединил, основываясь на чтении статей в Википедии, предыдущих ответах stackoverflow и т. Д. В настоящее время программа возвращает true для простых чисел, но не возвращает false. Я хочу сделать это без использования встроенных функций. Как мне это исправить?Определение того, является ли число простым в Ruby

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

Примечание: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' являются встроенными функциями. : P – Amadan

+0

@amadan - не педантичный; вы знаете, что @TiantianShi относится к библиотекам типа «Прайм». – Pavling

ответ

0

У вас есть логическая проблема. Программа возвращает true для любого числа, которое не делится на 2. Итак, просто поместите оператор return true после того, как цикл был выполнен полностью.

def prime?(integer) 
    return false if integer < 2 
    (2..integer - 1).each do |x| 
     if (integer % x) == 0 
      return false 
     end 
    end 
    true 
end 
+0

Похоже, что этот метод все еще не возвращает false, если это не простое число ... есть ли также логическая проблема с моей проверкой? –

+0

Он работает правильно для меня, как вы его протестировали? –

+0

Я думаю, что это не просто не работает для случая 1 и 0 –

0

Альтернатива, начиная с переменной, установленной в true.

def prime?(integer) 
    (2..integer - 1).each {|x| return false if (integer % x) == 0 } 
    true 
end 
+1

'val' может быть установлен на' false', а затем на 'true'. Вы просто хотите вернуть 'false', если найден множитель между' 2' и 'integer-1'. Если такого фактора нет, верните 'true'. Вам не нужна переменная 'val'. –

+0

Спасибо, отзыв хорошо принят. – gonzalo2000

+0

Вы можете отредактировать свой ответ –

Смежные вопросы