; triperfect numbers
(define (factors n)
(let ((wheel (vector 1 2 2 4 2 4 2 4 6 2 6)))
(let loop ((n n) (f 2) (w 0) (fs (list)))
(cond ((< n (* f f)) (reverse (cons n fs)))
((zero? (modulo n f))
(loop (/ n f) f w (cons f fs)))
(else (loop n (+ f (vector-ref wheel w))
(if (= w 10) 3 (+ w 1)) fs))))))
(define (divisors n) ; divisors of n, including 1 and n
(let ((divs (list 1)))
(do ((fs (factors n) (cdr fs))) ((null? fs) (sort divs <))
(let ((temp (list)))
(do ((ds divs (cdr ds)))
((null? ds) (set! divs (append divs temp)))
(let ((d (* (car fs) (car ds))))
(when (not (member d divs))
(set! temp (cons d temp)))))))))
(define (multi-perfect k)
(do ((n 1 (+ n 1))) ((= n 1000))
(when (= (apply + (divisors n)) (* k n))
(display n) (newline))))
(multi-perfect 3)
OyB0cmlwZXJmZWN0IG51bWJlcnMKCihkZWZpbmUgKGZhY3RvcnMgbikKICAobGV0ICgod2hlZWwgKHZlY3RvciAxIDIgMiA0IDIgNCAyIDQgNiAyIDYpKSkKICAgIChsZXQgbG9vcCAoKG4gbikgKGYgMikgKHcgMCkgKGZzIChsaXN0KSkpCiAgICAgIChjb25kICgoPCBuICgqIGYgZikpIChyZXZlcnNlIChjb25zIG4gZnMpKSkKICAgICAgICAgICAgKCh6ZXJvPyAobW9kdWxvIG4gZikpCiAgICAgICAgICAgICAgKGxvb3AgKC8gbiBmKSBmIHcgKGNvbnMgZiBmcykpKQogICAgICAgICAgICAoZWxzZSAobG9vcCBuICgrIGYgKHZlY3Rvci1yZWYgd2hlZWwgdykpCiAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoPSB3IDEwKSAzICgrIHcgMSkpIGZzKSkpKSkpCgooZGVmaW5lIChkaXZpc29ycyBuKSA7IGRpdmlzb3JzIG9mIG4sIGluY2x1ZGluZyAxIGFuZCBuCiAgKGxldCAoKGRpdnMgKGxpc3QgMSkpKQogICAgKGRvICgoZnMgKGZhY3RvcnMgbikgKGNkciBmcykpKSAoKG51bGw/IGZzKSAoc29ydCBkaXZzIDwpKQogICAgICAobGV0ICgodGVtcCAobGlzdCkpKQogICAgICAgIChkbyAoKGRzIGRpdnMgKGNkciBkcykpKQogICAgICAgICAgICAoKG51bGw/IGRzKSAoc2V0ISBkaXZzIChhcHBlbmQgZGl2cyB0ZW1wKSkpCiAgICAgICAgICAobGV0ICgoZCAoKiAoY2FyIGZzKSAoY2FyIGRzKSkpKQogICAgICAgICAgICAod2hlbiAobm90IChtZW1iZXIgZCBkaXZzKSkKICAgICAgICAgICAgICAoc2V0ISB0ZW1wIChjb25zIGQgdGVtcCkpKSkpKSkpKQoKKGRlZmluZSAobXVsdGktcGVyZmVjdCBrKQogIChkbyAoKG4gMSAoKyBuIDEpKSkgKCg9IG4gMTAwMCkpCiAgICAod2hlbiAoPSAoYXBwbHkgKyAoZGl2aXNvcnMgbikpICgqIGsgbikpCiAgICAgIChkaXNwbGF5IG4pIChuZXdsaW5lKSkpKQoKKG11bHRpLXBlcmZlY3QgMyk=