summaryrefslogtreecommitdiff
path: root/clojure
diff options
context:
space:
mode:
authorGuillermo Ramos2013-05-27 10:31:48 +0200
committerGuillermo Ramos2013-05-27 10:31:48 +0200
commit317ee36636ebeec986971ef857cd297f0320e58d (patch)
tree88c10fdbf166beae22f6c9d6c79970ae2240f4b0 /clojure
downloadeuler-317ee36636ebeec986971ef857cd297f0320e58d.tar.gz
start
Diffstat (limited to 'clojure')
-rw-r--r--clojure/p1.clj8
-rw-r--r--clojure/p3.clj9
-rw-r--r--clojure/primos.clj29
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)))