fork download
  1. ; your code goes here
  2.  
  3. (define (factors n) ; 2,3,5-wheel
  4. (let ((wheel (vector 1 2 2 4 2 4 2 4 6 2 6)))
  5. (let loop ((n n) (f 2) (w 0) (fs (list)))
  6. (if (< n (* f f)) (reverse (cons n fs))
  7. (if (zero? (modulo n f))
  8. (loop (/ n f) f w (cons f fs))
  9. (loop n (+ f (vector-ref wheel w))
  10. (if (= w 10) 3 (+ w 1)) fs))))))
  11. (define (numdiv n)
  12. (let ((fs (factors n)))
  13. (let loop ((prev (car fs)) (fs (cdr fs)) (f 2) (d 1))
  14. (cond ((null? fs) (* d f))
  15. ((= (car fs) prev) (loop prev (cdr fs) (+ f 1) d))
  16. (else (loop (car fs) (cdr fs) 2 (* d f)))))))
  17.  
  18. (define (euler12 limit)
  19. (let loop ((n 1) (tri 1))
  20. (if (< limit (numdiv tri))
  21. (list n tri (numdiv tri))
  22. (loop (+ n 1) (+ tri n 1)))))
  23.  
  24. (display (euler12 500)) (newline)
Time limit exceeded #stdin #stdout 15s 52960KB
stdin
Standard input is empty
stdout
(12375 76576500 576)