Project Euler Problem 27 asks us to find the coefficients of a formula that will produce as many prime numbers as possible for consecutive integer values that are inputs.
A brute force approach is concise and all we need to solve the problem. See problem 7 for the definition of lazy-primes-cgrande.
(def primes (lazy-primes-cgrande))
(defn prime? [n]
(not-any? #(zero? (rem n %)) (take-while #(<= (* % %) n) primes)))
(defn gen-quadratics [a b]
(map (fn [n] (+ (* n n) (* a n) b)) (iterate inc 0)))
(defn euler-27 []
(let [quads (for [a (range -1000 1000)
b (range -1000 1000)]
[a b (count (take-while #(and (> % 0)
(prime? %))
(gen-quadratics a b)))])
[a b _] (reduce #(if (> (nth %1 2) (nth %2 2)) %1 %2) quads)]
(* a b)))
I don’t see any obvious algorithmic improvements at this point that would reduce the amount of computation necessary to perform. Anybody else see one?