Оглавление > Наименьшее кратное (F#)
07.02.2023

Наименьшее кратное (F#)

2520 - самое маленькое число, которое делится без остатка на все числа от 1 до 10.
Какое самое маленькое число делится нацело на все числа от 1 до 20?

Решение

В Общем виде решение таково: идем от 2 до 20 и делим текущее число на список множителей, все что осталось после деления на все множители добавляем в этот список и переходим к следующему числу.

  • Объявляем функцию деления числа на список множителей: если делится - то делим, если нет - пропускаем, возвращаем то, что осталось
let divbylist lst (x: int) =
    lst |> List.fold (fun acc a -> if acc % a = 0 then acc / a else acc) x
  • Применяем эту функцию к последовательности чисел 2..20
let muls =
    [ 2..20 ] |> List.fold (fun s x -> (divbylist s x) :: s) []
  • Перемножаем полученный список множителей и выводим ответ
let answer = muls |> List.reduce ( * )

printfn $"the answer is {answer}" //the answer is 232792560