我正在通过euler项目学习clojure,并且正在处理第10个问题(查找所有素数低于200万的数据总和)。我为eratosthenes筛选实现了一个非常字面的算法,但它的运行速度太慢,高达两百万是有用的。我试图与环RECUR实现它不产生任何新的框架,但没有对性能有很大的影响。如何提高eratosthenes算法的clojure筛选性能?
(defn find-primes-sum [last-prime nums]
(loop [p last-prime n nums sum 0]
(println p)
(if (empty? n)
sum
(recur (first n) (doall (remove #(zero? (mod % (first n))) n)) (+ sum (first n))))))
(defn sieve-primes-until [limit]
(find-primes-sum 2 (filter odd? (range 2 (inc limit)))))
(println (sieve-primes-until 2000000))
有这个页面,你会发现有趣的相关部分的几个问题。 – 2011-06-17 14:53:33