모두 아래 기능 (SQRT n)도 2에서 이동, n은 비 프라임 경우 모두성능 차이
(defn is-prime-for? [n]
(empty? (for [i (range 2 (math/sqrt (inc n)))
:when (= 0 (rem n i))]
i)))
(defn is-prime-loop? [n]
(loop [i 2]
(cond (> i (math/sqrt (inc n))) true
(zero? (rem n i)) false
:else (recur (inc i)))))
그런 다음 즉시 감지 될 때 중지 왜 우리는 그 대폭적인 성능 차이를 보입니까? 은 "루프"버전은
project-euler.prob010> (time (dorun (map is-prime-for? (range 200000))))
"Elapsed time: 3267.613099 msecs"
;; => nil
project-euler.prob010> (time (dorun (map is-prime-loop? (range 200000))))
"Elapsed time: 12961.190032 msecs"
;; => nil
하나는 equals를 사용하고 다른 하나는 0을 사용합니까? 술부. 그래서 그것은 다른 하나의 것입니다. – RedDeckWins