Я пытаюсь решить проект euler # 5:
2520 - это наименьшее число, которое можно без деления разделить на каждое из чисел от 1 до 10.
Какое наименьшее положительное число, которое равномерно делится на все числа от 1 до 20?
Вот мой код:
open System
let rec gcd a b =
match b with
| x when x = 0 -> a
| _ -> gcd b (a % b)
let lcm a b = (a * b) / (gcd a b)
let result = Seq.fold lcm 1 [1..20]
[<EntryPoint>]
let main(args : string[]) =
printfn "result = %d" result
0
Отлично работает с числами [1..19], но я получаю неправильный результат с числами [1..20].Я пытался выяснить причину ошибки и обнаружил, что:
$ Seq.fold lcm 1 [1..19]
232792560 // right
$ lcm 232792560 20
18044195 // wrong
Это похоже на переполнение типа.Как я могу исправить ошибку?