Sorry for the delayed response.
OK... here's an example; my solution to problem 187:
(defn divides? [n d]
(zero? (rem n d))
)
(declare prime? prime-seq)
(defn prime? [n]
(if (< n 2)
false
(every? #(not (divides? n %)) (take-while #(<= (* % %) n) prime-
seq)))
)
(def prime? (memoize prime?))
(def prime-seq
(lazy-seq (concat '(2 3 5 7)
(filter #(prime? %) (map #(+ (* 2 %) 7) (iterate inc 1)))))
)
(defn factorize [n]
(loop [test-primes prime-seq
tmp n
retval '()]
(if (= 1 tmp)
retval
(if (prime? tmp)
(concat retval (list tmp))
(let [p (first test-primes)]
(if (divides? tmp p)
(recur test-primes (quot tmp p) (concat retval (list p)))
(recur (rest test-primes) tmp retval))))))
)
(defn twice-composite? [n]
(= 2 (count (factorize n)))
)
(count (filter twice-composite? (range 1 30)))
This appears to be correct, since I get the answer 10 for this one
case. However, trying to run for n<10^6 takes 6-11 seconds, and for
10^7 at least three minutes, so running for 10^8 is like going to take
on the order of hours.
I know that my prime number generator is nowhere near optimal, and I
know that in order to efficiently solve a lot of the Euler problems,
you cannot simply brute force them; you need to choose your algorithm
wisely.
Anyway... any suggestions would be greatly appreciated.
dan kefford
On Nov 2, 4:52 pm, Alan <[email protected]> wrote:
> Usually it's more about the algorithm than the language. Java can
> generally do things faster than clojure, simply because it has fewer
> layers, but the speedup is a linear factor. If the java solution for
> 1000 elements takes 5ms and your clojure code takes even a second,
> it's likely that clojure isn't to blame. Maybe you could post one of
> your solutions, or simply compare it to a java solution yourself?
>
> On Nov 2, 10:32 am, Dan Kefford <[email protected]> wrote:
>
> > Hello fellow clojurians...
>
> > I've been using Clojure now fairly regularly for the past two months
> > solving problems on Project Euler. I've been fairly successful solving
> > them but there are times where the performance of my code either
> > stinks (the answer may come back in 5-10 minutes) or not at all even
> > though I have effectively solved the problem (the code is correct and
> > will return the answer for n < 1000 but for n < 10^8... forget about
> > it.)
>
> > My question is: are there any materials out there on how to optimize
> > performance of Clojure code? There doesn't seem to be a lot out there.
>
> > Thanks in advance,
>
> > dan kefford
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en