【发布时间】:2015-01-23 04:10:39
【问题描述】:
以下 F# 代码给出了Project Euler problem #7 的正确答案:
let isPrime num =
let upperDivisor = int32(sqrt(float num)) // Is there a better way?
let rec evaluateModulo a =
if a = 1 then
true
else
match num % a with
| 0 -> false
| _ -> evaluateModulo (a - 1)
evaluateModulo upperDivisor
let mutable accumulator = 1 // Would like to avoid mutable values.
let mutable number = 2 // ""
while (accumulator <= 10001) do
if (isPrime number) then
accumulator <- accumulator + 1
number <- number + 1
printfn "The 10001st prime number is %i." (number - 1) // Feels kludgy.
printfn ""
printfn "Hit any key to continue."
System.Console.ReadKey() |> ignore
- 我想避免使用
mutable值 accumulator 和 number。我还想将while循环重构为尾递归函数。有什么建议吗? - 关于如何删除显示结果的 (number - 1) 杂物有什么想法吗?
- 关于此代码的任何一般性 cmet 或有关如何改进它的建议?
【问题讨论】: