fast. very very fast. added by elflng on Wed May 11 07:36:10 2016

(define (gen-primes-init n)
    (let loop ((i   3)
               (l   '(2)))
        (if (>= i n)
	    (cons i l)
	    (let loop2 ((p   l))
	        (if (null? p)
		    (loop (fx+ 2 i) (append l (list i)))
		    (if (fx= 0 (fxmod i (car p)))
		        (loop (fx+ 2 i) l)
			(loop2 (cdr p))))))))

(define (gen-primes n)
    (let ((sl   (gen-primes-init (sqrt n)))
          (l    '())
          (i    0))
        (set! i (car sl))
	(set! sl (cdr sl))
	(let loop ((i   i))
	    (if (>= i n)
	        (append sl (reverse l))
		(let loop2 ((p   sl))
		    (cond ((null? p)
		              (set! l (cons i l))
			      (loop (fx+ 2 i)))
			  ((fx= 0 (fxmod i (car p)))
			      (loop (fx+ 2 i)))
			  (else
			      (loop2 (cdr p)))))))))