intersection

added
1.0

ns
clojure.set

type
function

(intersection s1) (intersection s1 s2) (intersection s1 s2 & sets)

Return a set that is the intersection of the input sets

                user=> (clojure.set/intersection #{1})
#{1}
user=> (clojure.set/intersection #{1 2} #{2 3})
#{2}
user=> (clojure.set/intersection #{1 2} #{2 3} #{3 4})
#{}
user=> (clojure.set/intersection #{1 :a} #{:a 3} #{:a})
#{:a}

            
                ; gcd => Greatest common divisor
(defn find-divisors [x]
  (let [divisors (atom [x])]
    (doseq [_x (range 1 x)] (if (== 0 (mod x _x))
                              (swap! divisors conj _x)
                              ))
    @divisors
    )
  )
(defn gcd [x y] (let
                  [x-div (set (find-divisors x))
                   y-div (set (find-divisors y))]
                  (last (into [] (clojure.set/intersection y-div x-div)))
                  ))
;; lcm least common multiply
(defn lcm [x y] (/ (Math/abs (* x y)) (gcd x y)))


=> #'user/find-divisors
=> #'user/gcd
=> #'user/lcm
(lcm 4 6)
=> 12
            
                (clojure.set/intersection #{:a :b :c} #{:d :c :b})
;=> #{:b :c}

(clojure.set/intersection #{:a :e :i :o :u}
\t\t\t  #{:a :u :r}
\t\t\t  #{:r :u :s})
;=> #{:u}