Вы можете рассматривать эту проблему как операцию фильтрации. Вы начинаете со всех возможных факторов и сохраняете те, где остаток при делении ввода на это число равен 0. Операция, которая делает это в Scala, равна filter
, которая сохраняет значения, при которых конкретный тест является истинным, и удаляет остальные:
def factors(n: Int): List[Int] =
(2 until n).filter(n % _ == 0).toList
Чтобы код был коротким, я также использовал краткую форму функции, где _
обозначает аргумент функции, поэтому n % _
означает n
, деленное на текущий номер, который проверяется.