; project euler problem 3
(define (factors n) ; trial division
(let loop ((n n) (fs '()))
(if (even? n) (loop (/ n 2) (cons 2 fs))
(let loop ((n n) (f 3) (fs fs))
(if (< n (* f f)) (reverse (cons n fs))
(if (zero? (modulo n f))
(loop (/ n f) f (cons f fs))
(loop n (+ f 2) fs)))))))
(display (factors 13195))