写一个函数find-abundant,取一个正数并生成一个包含所有小于给定数的丰裕数的列表



我想去那件事,但我不知道怎么做编写一个函数find-abundant,以正数和作为参数生成不大于给定数的所有丰裕数的列表,按顺序从从最大到最小。(find-abundant 25)

(define (find-abundant n)
  (define (check-abundant n)
    (define (sum-of-proper-divisors n)
      (let loop ((i (sub1 n)))
        (cond
          [(= i 1) 1]
          [(= (remainder n i) 0)
           (+ i (loop (sub1 i)))]
          [else (loop (sub1 i))])))
  (cond
    ((> (sum-of-proper-divisors n)  n) 1)
    (else 0)))
  (define (enumerate-interval high low)
    (if (> low high)
        null
        (cons high (enumerate-interval (- high 1) low))))
  (filter (lambda (n)
            (= (check-abundant n) 1))
          (enumerate-interval (- n 1) 12)))

乍一看可能很复杂,但在find-abundant中有两个嵌套过程,而check-abundant中也有一个嵌套过程,即固有除数和。您也可以分离所有的过程。

最新更新