The following F# code gives the correct answer to 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
```

- I'd like to avoid the
`mutable`

values*accumulator*and*number*. I'd also like to refactor the`while`

loop into a tail recursive function. Any tips? - Any ideas on how to remove the
*(number - 1)*kludge which displays the result? - Any general comments about this code or suggestions on how to improve it?

## comments:

`nthPrime 10000`

since`Seq.nth`

is zero-based.