Skip to content

Project Euler Problem 49

November 26, 2011

Project Euler Problem 49 solution:

#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 arePermutes n =
    let toSet n = n.ToString().ToCharArray() |> set
    (toSet (n + 3330)).Equals((toSet n)) &&
    (toSet (n + 6660)).Equals((toSet n))

let isUnusual n =
    (isPrime (n + 3330)) &&
    (isPrime (n + 6660)) &&
    (arePermutes n)

let problem049 () =
    primes
    |> Seq.skipWhile ((>=) 1489)
    |> Seq.find isUnusual
    |> fun x -> sprintf "%d%d%d" x (x+3330) (x+6660)

This solution pops me up to Level 2!

Advertisements

From → Project Euler

One Comment

Trackbacks & Pingbacks

  1. Project Euler Problem 70 « In F# Major

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: