Skip to content

Instantly share code, notes, and snippets.

@gnarmis
Created January 5, 2013 18:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gnarmis/4463032 to your computer and use it in GitHub Desktop.
Save gnarmis/4463032 to your computer and use it in GitHub Desktop.
Solution to Project Euler problem 3. Require Clojure 1.5 RC1 and runs in less than a quarter of a second in my Clojure REPL.
(ns euler.three
(require [clojure.core.reducers :as r]))
(declare largest-prime-factor-for)
(declare factors-of)
(declare source-factors)
(declare source-naturals)
(declare factor?)
(declare prime?)
(declare certainty)
(defn answer []
(time (largest-prime-factor-for 600851475143)))
(defn largest-prime-factor-for [n]
(let [prime-factors (r/filter prime?
(factors-of n))]
(last (into [] prime-factors))))
(defn factors-of [n]
(r/filter #(factor? n %)
(source-factors n)))
(defn source-factors [n]
(r/take-while #(< % (int (Math/sqrt n)))
(source-naturals)))
(defn source-naturals []
(r/map #(+ % 2) (range)))
(defn factor? [n possib]
(zero? (mod n possib)))
(defn prime? [n]
(.isProbablePrime (BigInteger/valueOf n) certainty))
(def certainty 10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment