This one was straight forward, just had to follow instructions (I didn’t apply any mathematical optimizations, because it looked like if once I got started, I’d be able to solve it all by hand). I needed to adjust *isPrime* to return false for values of *n* less than 2. I got carried away implementing it SQL style; one long run-on sentence (excluding *problem27a*, not a single let binding!). Parallelization improves speed by about 25 percent.

let problem27a = seq { for a in -999..999 do for b in -999..999 do yield (a,b) } |> PSeq.map(fun (a,b) -> (a*b, Seq.initInfinite id |> Seq.takeWhile (fun n -> n*n + a*n + b |> isPrime) |> Seq.length)) |> PSeq.maxBy snd |> fst

## No comments:

## Post a Comment