Created
January 5, 2013 18:47
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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