Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; Надо написать решето эратосфена
- ;; Самое примитивное, без лишних проверок
- ;; проверить результат на (prime 200000)
- ;; функция вымученная, не смог придумать ничего лучше
- ;; дико не оптимальная
- (defn prime? [number prime-vec]
- (if (empty? (for [i prime-vec
- j (range (count prime-vec))
- :when (zero? (rem number i))]
- j))
- true
- false))
- ;; попытка 1 - не работает из-за переходной структуры
- (defn prime [n]
- (loop [i 3
- x (transient [2])]
- (if (< i n)
- (recur (inc i)
- (if (prime? i x)
- (conj! x i)
- x))
- (persistent! x))))
- ;; уходит думать до завтра я так думаю из-за предиката prime?
- (defn prime2 [n]
- (loop [i 3
- x [2]]
- (if (< i n)
- (recur (inc i)
- (if (prime? i x)
- (conj x i)
- x))
- x)))
- ;; stackoverflow error
- (defn prime3 [n]
- (loop [i 2
- primes-list (range 2 n)]
- (if (< i n)
- (recur (inc i)
- (remove #(if (and (not (= % i))
- (= 0 (mod % i)))
- true
- false)
- primes-list))
- primes-list)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement