素数のお勉強 3 - 過剰数

過剰数を求めてみる。

過剰数は、約数の総和が元の数の2倍より大きい数のことである。

(define (divisor n)
  (letrec ((iter (lambda (m)
                   (cond ((> m n) '())
                         ((= (modulo n m) 0)
                          (cons m
                                (iter (+ m 1))))
                         (else
                           (iter (+ m 1)))))))
          (iter 1)))

(filter (lambda (n)
          (< (* 2 n)
              (apply + (divisor n))))
        (iota 100 1))
; (12 18 20 24 30 36 40 42 48 54 56 60 66 70 72 78 80 84 88 90 96 100)

ふむふむ。


約数の総和が、

  • 2倍より大きいと、過剰数
  • 2倍だと、完全数
  • 2倍より少ないと不足数

「自分自身を含まない約数の総和」とした場合は、自分自身の数と比べる。