// Learn more about F# at http://fsharp.net open System open System.Collections.Generic let IsPrime n = if n = 1 then false else let max = n |> float |> sqrt |> int let rec Test = function | x when x > max -> true | x -> if (n % x) = 0 then false else Test (x+1) Test 2 let NthLeftTruncatablePrime n = let oneDigitPrimes = [2;3;5;7] seq { let primes = ref oneDigitPrimes for tens = 1 to 8 do let acc = ref [] for i=1 to 9 do let newPrime = i * pown 10 tens let primes' = ref !primes while (!primes').Length > 0 do let x = newPrime+(!primes').Head if IsPrime x then acc := x :: !acc yield x primes' := (!primes').Tail done done primes := !acc |> List.rev done } |> Seq.append oneDigitPrimes |> Seq.nth (n-1) open System.Diagnostics do NthLeftTruncatablePrime 100 |> ignore let timer = Stopwatch.StartNew() let mutable prime = 1 for i = 1 to 1000 do prime <- NthLeftTruncatablePrime 1000 done timer.Stop() Debug.WriteLine(prime) Debug.WriteLine(timer.ElapsedMilliseconds)