我試圖解決項目歐拉#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 - 實際上,我將修改我的答案以表明相反,因爲無論如何您都無法擁有遞歸內聯函數。 –