我最近开始学习Clojure并决定练习Euler问题,以获取可用数据结构并练习递归和循环.
我尝试了问题50的各种方法,但不管我做了什么,找到1000000的解决方案从未完成.在我查看其他人所做的事情之后,我猜想我所做的事情也不应该永远消失,所以我在Python中输入等效算法来查看问题是否是我对某些Clojure事物或Java设置缺乏了解.Python在10秒内完成.对于低于100000的素数,Python版本在0.5秒内完成,Clojure在5秒内完成.
我发布了专门为匹配Python代码而创建的Clojure版本.你能帮我理解为什么性能会有这么大差异吗?我应该使用unchecked-add,输入提示,原语(但在哪里?)或什么?
所以这是Clojure:
(defn prime? [n]
(let [r (int (Math/sqrt n))]
(loop [d 2]
(cond
(= n 1) false
(> d r) true
(zero? (rem n d)) false
:other (recur (inc d))))))
(defn primes []
(filter prime? (iterate inc 2)))
(defn cumulative-sum [s]
(reduce
(fn [v, x] (conj v (+ (last v) x)))
[(first s)]
(rest s)))
(defn longest-seq-under [n]
"Longest prime seq with sum under n"
(let [ps (vec (take-while #(< % n) (primes))) ; prime …Run Code Online (Sandbox Code Playgroud)