(defn primes []
(let [sieve (fn sieve [dic n]
(if-let [factors (dic n)]
(recur (reduce #(update % (+ n %2) (fnil conj []) %2)
(dissoc dic n) factors) (inc n))
(lazy-seq (cons n (sieve (assoc dic (* n n) [n]) (inc n))))))]
(sieve {} 2)))
(println (->> (primes) (drop 100000) first))
KGRlZm4gcHJpbWVzIFtdCiAgICAobGV0IFtzaWV2ZSAoZm4gc2lldmUgW2RpYyBuXSAKICAgICAgICAgICAgKGlmLWxldCBbZmFjdG9ycyAoZGljIG4pXQogICAgICAgICAgICAgICAgKHJlY3VyIChyZWR1Y2UgIyh1cGRhdGUgJSAoKyBuICUyKSAoZm5pbCBjb25qIFtdKSAlMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNzb2MgZGljIG4pIGZhY3RvcnMpIChpbmMgbikpCiAgICAgICAgICAgICAgICAobGF6eS1zZXEgKGNvbnMgbiAoc2lldmUgKGFzc29jIGRpYyAoKiBuIG4pIFtuXSkgKGluYyBuKSkpKSkpXQogICAgICAgIChzaWV2ZSB7fSAyKSkpCgoocHJpbnRsbiAoLT4+IChwcmltZXMpIChkcm9wIDEwMDAwMCkgZmlyc3QpKQ==