17 lines
580 B
Common Lisp
17 lines
580 B
Common Lisp
;; using (sum-divisors) from math.lib
|
|
|
|
(lib 'math)
|
|
(define (amicable N)
|
|
(define n 0)
|
|
(for/list ((m (in-range 2 N)))
|
|
(set! n (sum-divisors m))
|
|
#:continue (>= n (* 1.5 m)) ;; assume n/m < 1.5
|
|
#:continue (<= n m) ;; prevent perfect numbers
|
|
#:continue (!= (sum-divisors n) m)
|
|
(cons m n)))
|
|
|
|
(amicable 20000)
|
|
→ ((220 . 284) (1184 . 1210) (2620 . 2924) (5020 . 5564) (6232 . 6368) (10744 . 10856) (12285 . 14595) (17296 . 18416))
|
|
|
|
(amicable 1_000_000) ;; 42 pairs
|
|
→ (... (802725 . 863835) (879712 . 901424) (898216 . 980984) (947835 . 1125765) (998104 . 1043096))
|