我试图解决项目欧拉#5:项目欧拉#类型溢出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
它看起来像类型的溢出。我该如何解决这个错误?
而不是步骤1,你也可以用'0I'代替'0'。 –
@Ramon Snir - 实际上,我将修改我的答案以表明相反,因为无论如何您都无法拥有递归内联函数。 –