; rowland's prime-generating function
(define (A106108 limit) ; initial sequence
(let loop ((n 1) (as '(7)))
(if (<= limit n) (reverse as)
(let* ((n (+ n 1))
(a (+ (car as) (gcd n (car as)))))
(loop n (cons a as))))))
(define (A132199 limit) ; differences
(let loop ((n 2) (prev 7) (ds '()))
(if (< limit (- n 1)) (reverse ds)
(let* ((next (+ prev (gcd n prev)))
(d (- next prev)))
(loop (+ n 1) next (cons d ds))))))
(define (A137613 limit) ; only primes
(let loop ((n 2) (prev 7) (ps '()))
(if (<= limit (length ps))
(reverse ps)
(let* ((next (+ prev (gcd n prev)))
(d (- next prev)))
(loop (+ n 1) next (if (= d 1) ps (cons d ps)))))))
(define (least-prime-divisor n)
(do ((d 3 (+ d 2))) ((zero? (modulo n d)) d)))
(define (shortcut limit)
(let loop ((limit limit) (k 5) (as '(5)))
(if (= limit 1) (reverse as)
(let* ((k (+ k (car as) -1))
(a (least-prime-divisor k)))
(loop (- limit 1) k (cons a as))))))
(display (A106108 65)) (newline)
(display (A132199 104)) (newline)
(display (A137613 72)) (newline)
(display (shortcut 72)) (newline)