Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;; Надо написать решето эратосфена
  2. ;; Самое примитивное, без лишних проверок
  3. ;; проверить результат на (prime 200000)
  4.  
  5.  
  6. ;; функция вымученная, не смог придумать ничего лучше
  7. ;; дико не оптимальная
  8. (defn prime? [number prime-vec]
  9.   (if (empty? (for [i prime-vec
  10.                     j (range (count prime-vec))
  11.                     :when (zero? (rem number i))]
  12.                 j))
  13.     true
  14.     false))
  15.  
  16. ;; попытка 1 - не работает из-за переходной структуры
  17. (defn prime [n]
  18.   (loop [i 3
  19.          x (transient [2])]
  20.     (if (< i n)
  21.       (recur (inc i)
  22.              (if (prime? i x)
  23.                (conj! x i)
  24.                x))
  25.       (persistent! x))))
  26.  
  27. ;; уходит думать до завтра я так думаю из-за предиката prime?
  28. (defn prime2 [n]
  29.   (loop [i 3
  30.          x [2]]
  31.     (if (< i n)
  32.       (recur (inc i)
  33.              (if (prime? i x)
  34.                (conj x i)
  35.                x))
  36.       x)))
  37.  
  38. ;; stackoverflow error
  39. (defn prime3 [n]
  40.   (loop [i 2
  41.          primes-list (range 2 n)]
  42.     (if (< i n)
  43.       (recur (inc i)
  44.              (remove #(if (and (not (= % i))
  45.                                (= 0 (mod % i)))
  46.                         true
  47.                         false)
  48.                      primes-list))
  49.       primes-list)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement