用clojure解决euler problem 12

问题描述:

The sequence of triangle numbers is generated by adding the natural numbers. So the 7thtriangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Let us list the factors of the first seven triangle numbers:

1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

解决方案:

(ns euler-problem-12.core
  (:use [clojure.contrib.math]))

(defn prime?
  [num]
 (every? #(or (> (rem num %) 0) (= num %)) (apply list (range 2 (inc (ceil (sqrt num)))))))

(defn next-prime
  [num]
  (loop [x (inc num)]
    (if (prime? x)
      x
      (recur (inc x)))))

(defn prime-factors
  [n]
  (loop
      [curent-n n, p 2, c [ ]]
    (if (prime? curent-n)
      (conj c curent-n)
      (if (= 0 (rem curent-n p))
        (recur (/ curent-n p) p (conj c p))
        (recur curent-n (next-prime p) c)))))

(defn factors-count
  [vprime-factors]
  (loop
      [last-factor nil, factors vprime-factors, counts [1], c-count 2]
    (if (empty? factors)
      (apply * counts)
      (if (= last-factor (first factors))
        (recur last-factor  (rest factors) counts (inc c-count))
        (recur (first factors) (rest factors) (conj counts c-count) 2)))))

(defn first-triangle-number-500-factors
  []
  (loop
      [n 2, t-n 1]
    (if (> (factors-count (prime-factors (+ t-n n))) 500)
      (+ t-n n)
      (recur (inc n) (+ t-n n)))))

(first-triangle-number-500-factors)
答案: 76576500


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值