33 lines
1.1 KiB
Clojure
33 lines
1.1 KiB
Clojure
(ns test-p.core)
|
|
(defn gcd
|
|
"(gcd a b) computes the greatest common divisor of a and b."
|
|
[a b]
|
|
(if (zero? b)
|
|
a
|
|
(recur b (mod a b))))
|
|
|
|
(defn stern-brocat-next [p]
|
|
" p is the block of the sequence we are using to compute the next block
|
|
This routine computes the next block "
|
|
(into [] (concat (rest p) [(+ (first p) (second p))] [(second p)])))
|
|
|
|
(defn seq-stern-brocat
|
|
([] (seq-stern-brocat [1 1]))
|
|
([p] (lazy-seq (cons (first p)
|
|
(seq-stern-brocat (stern-brocat-next p))))))
|
|
|
|
; First 15 elements
|
|
(println (take 15 (seq-stern-brocat)))
|
|
|
|
; Where numbers 1 to 10 first appear
|
|
(doseq [n (concat (range 1 11) [100])]
|
|
(println "The first appearnce of" n "is at index" (some (fn [[i k]] (when (= k n) (inc i)))
|
|
(map-indexed vector (seq-stern-brocat)))))
|
|
|
|
;; Check that gcd between 1st 1000 consecutive elements equals 1
|
|
; Create cosecutive pairs of 1st 1000 elements
|
|
(def one-thousand-pairs (take 1000 (partition 2 1 (seq-stern-brocat))))
|
|
; Check every pair has a gcd = 1
|
|
(println (every? (fn [[ith ith-plus-1]] (= (gcd ith ith-plus-1) 1))
|
|
one-thousand-pairs))
|