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