[language] Clojure算法问题学习解答,和各位探讨

didasoft 2014-12-19

小于10的自然数中是3的倍数或者5的倍数的数,包括3,5,6,9。这些数的和为23。
请求出小于1000自然数中是3的倍数或者5的倍数的数的和。

 

(reduce + (filter #(or (zero? (rem % 5)) (zero? (rem % 3))) (range 1 1000)))

 

didasoft 2014-12-19

计算斐波那契数列中小于4百万的所有偶数的和。

 

(reduce +
        (filter
         #(even? %)
         (loop
             [result [1] value 2]
           (let [lastvalue (last result)
                 result (conj result value)
                 value (+ lastvalue value)]
             (if (> value 4000000)
               result
               (recur result value))))))

 

didasoft 2014-12-19

13159的素数因子,包括5,7,13,29。

 

600851475143的最大的素数因子。

 

(defn factor?
  "determine whether input number is a factor of another parameter"
  [source dest]
  (let [divend (/ dest source)]
    (== divend (bigint divend))))

(reduce max (loop
                         [result [] number 600851475143 divider 2]
                       (if (> divider number)
                         result
                         (if (factor? divider number)
                           (let [new-result (conj result divider) new-divider 2]
                             (recur new-result (/ number divider) new-divider))
                           (recur result number (inc divider))
                           )
                         )
                       ))

 

 

 

Global site tag (gtag.js) - Google Analytics