# Project Euler Problem 37

Again reusing for Project Euler Problem 37 solution developments in prime numbers generation from Project Euler Problem 10 solution the rest of solution is trivial: filter primes sequence on truncatable property and take first 11 members.

open System #nowarn "40" let rec primes = Seq.cache <| seq { yield 2; yield! Seq.unfold nextPrime 3 } and nextPrime n = if isPrime n then Some(n, n + 2) else nextPrime(n + 2) and isPrime n = if n >= 2 then primes |> Seq.tryFind (fun x -> n % x = 0 || x * x > n) |> fun x -> x.Value * x.Value > n else false let isTruncatableL n = [let ns = string n for i = 0 to (String.length ns) - 1 do yield Convert.ToInt32(ns.Substring(i))] |> List.forall isPrime let isTruncatableR n = [let ns = string n for i = (String.length ns) downto 1 do yield Convert.ToInt32(ns.Substring(0,i))] |> List.forall isPrime let isTruncatable n = n > 7 && isTruncatableL n && isTruncatableR n let problem037 () = primes |> Seq.filter isTruncatable |> (Seq.take 11 >> Seq.sum)

Advertisements

Leave a Comment