项目Euler 1太慢,三角形数字

时间:2017-02-18 07:39:17

标签: clojure

我试图解决Euler Project问题1.我注意到了一个序列,可以更快地解决每个第15个数字。

这是Clojure代码

  (defn fifteenator [n]
  (* 15 (+ (* (+ 1 n) 3) (* (/ (+ (* n n) n) 2) 7))))

对于15 n是0表示30 n是1,依此类推。

所以我可以计算出可被15整除的最近数,并且只进行一些递归计算。但仍然有一个HackerRank测试用例超时。在我开始分析代码之前,我想确定我的推理是否正确。有没有更快的方法来计算它,或者我应该学习如何描述Clojure?

1 个答案:

答案 0 :(得分:0)

我不确定你的做法。 Clojure对范围和过滤器提供出色的支持。通过这些解决,欧拉1并不太难:

(defn euler1 
  [n] 
  (reduce + 
    (filter #(or (= (rem % 5) 0) (= (rem % 3) 0)) (range n))))

测试我们是否得到了正确的结果:

user=> (euler1 10)
23