2015-03-06 2 views
0

За исключением жесткого кодирования или использования модуля Math, есть ли способ найти делители 60 в Ruby on Rails. Любые вспомогательные методы/регулярное выражение, которые я могу использовать? Спасибо за вашу помощь.Самый простой способ найти дивизоры 60 в Ruby on Rails

+1

Возможно, потребуется больше контекста. –

+0

Мне нужно отображать делители 60 в выпадающем списке. – user2452057

ответ

2

Один из самых простых способов для достижения этой цели было бы создать список чисел от 1 до 60, а затем выбрать только те, которые делят 60 с нет остатка.

Чтобы расширить ответ SteveTurczyn, мы можем сделать:

(1..60).select { |n| 60 % n == 0 } 

(1..60) часть создает перечислитель (который в данном случае мы можем думать, как массив чисел от 1 до 60).

Затем вы хотите, чтобы принять этот массив, и выбрать только элементы являются делителями 60.

Мы можем использовать оператор модуля %, который дает нам осталось, когда мы делим число на другой остаток (например, , 5 % 2 возвращает 1). Конечно, если нет остатка, то мы знаем, что число делится чисто и поэтому является делителем этого числа (т. Е. Если a % b == 0, то b является делителем а).

Итак, что мы хотим сделать, используется выше в качестве критерия для выбора элементов из массива чисел от 1 до 60, что мы можем сделать с помощью метода Array#select.

Если у нас есть что-то, например массив (технически, я думаю, Enumerable), мы можем использовать #select и блок для вытягивания только элементов, которые удовлетворяют любым критериям, которые мы указываем в блоке.

The { |n| 60 % n == 0 } является блок мы переходим к Пометка, которая возвращает истину всякий раз, когда это 60 % n0 (каждый n представляет собой элемент из массива чисел от 1 до 60). Array#select возвращает только элементы в массиве, для которых блок оценивается как истинный, - как работает решение SteveTurczyn.

+1

Вы можете сделать половину числа сравнений, потому что число, большее половины 60, может быть его делителем (кроме самого 60). – Pavling

+1

«Часть (1..60) создает перечислитель». Почти. «Диапазон», фактически, который включает «Перечислимый». –

+0

@Pavling, тем не менее, каждый обнаруженный делитель фактически обнаруживает два, если вы также получаете коэффициент. Это позволяет только переходить к 'sqrt (n)' включительно. Однако алгоритм становится менее кратким. –

2

Это даст вам множество делителей

(1..60).select { |n| 60 % n == 0} 
=> [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60] 
Смежные вопросы