diff options
author | Guillermo Ramos | 2013-05-27 10:31:48 +0200 |
---|---|---|
committer | Guillermo Ramos | 2013-05-27 10:31:48 +0200 |
commit | 317ee36636ebeec986971ef857cd297f0320e58d (patch) | |
tree | 88c10fdbf166beae22f6c9d6c79970ae2240f4b0 /clojure | |
download | euler-317ee36636ebeec986971ef857cd297f0320e58d.tar.gz |
start
Diffstat (limited to 'clojure')
-rw-r--r-- | clojure/p1.clj | 8 | ||||
-rw-r--r-- | clojure/p3.clj | 9 | ||||
-rw-r--r-- | clojure/primos.clj | 29 |
3 files changed, 46 insertions, 0 deletions
diff --git a/clojure/p1.clj b/clojure/p1.clj new file mode 100644 index 0000000..2f66db1 --- /dev/null +++ b/clojure/p1.clj @@ -0,0 +1,8 @@ +(defn multiplo-3-o-5? [n] + (or + (zero? (mod n 3)) + (zero? (mod n 5)))) + +(let [lista (range 2 1000) + lista_mul (filter multiplo-3-o-5? lista)] + (println (apply + lista_mul))) diff --git a/clojure/p3.clj b/clojure/p3.clj new file mode 100644 index 0000000..39ae510 --- /dev/null +++ b/clojure/p3.clj @@ -0,0 +1,9 @@ +(loop [number 600851475143 + divisors ()] + (if (> number 1) + (let [div (or (some #(if (zero? (mod number %)) % false) + (cons 2 (range 3 (/ number 2) 2))) + number)] + (recur (/ number div) + (cons div divisors))) + (println (apply max divisors)))) diff --git a/clojure/primos.clj b/clojure/primos.clj new file mode 100644 index 0000000..2dc908e --- /dev/null +++ b/clojure/primos.clj @@ -0,0 +1,29 @@ +(ns primos) + +(defn not-divide? [m n] + (or + (= m n) + (not (zero? (mod m n))))) + +(defn criba [n] + (let [raiz (-> n (Math/sqrt) (Math/ceil) (int))] + (loop [lista (cons 2 (range 3 (inc n) 2)) + elm 3] + (if (< elm raiz) + (let [nueva_lista (filter (fn [n] (not-divide? n elm)) lista)] + (recur nueva_lista + (some #(if (> % elm) % false) nueva_lista))) + lista)))) + +(defn divisores [n] + (let [criba-n (criba (/ n 2))] + (loop [n-actual n + divis []] + (if (> n-actual 1) + (let [divisible? (fn [primo] (if (zero? (mod n-actual primo)) primo false)) + divisor (or (some divisible? criba-n) n-actual)] + (recur (/ n-actual divisor) + (cons divisor divis))) + divis)))) + +;(println (divisores (* 2 128473))) |