我试图解决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?
答案 0 :(得分:0)
我不确定你的做法。 Clojure对范围和过滤器提供出色的支持。通过这些解决,欧拉1并不太难:
(defn euler1
[n]
(reduce +
(filter #(or (= (rem % 5) 0) (= (rem % 3) 0)) (range n))))
测试我们是否得到了正确的结果:
user=> (euler1 10)
23