[ create a new paste ] login | about

Link: http://codepad.org/RHz3hGnB    [ raw code | output | fork | 1 comment ]

pbewig - Scheme, pasted on Jan 23:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(define (primes n)
  (let* ((max-index (quotient (- n 3) 2)) (v (make-vector (+ 1 max-index) #t)))
    (let loop ((i 0) (ps '(2)))
      (let ((p (+ i i 3)) (startj (+ (* 2 i i) (* 6 i) 3)))
        (cond ((>= (* p p) n)
                (let loop ((j i) (ps ps))
                  (cond ((> j max-index) (reverse ps))
                        ((vector-ref v j) (loop (+ j 1) (cons (+ j j 3) ps)))
                        (else (loop (+ j 1) ps)))))
              ((vector-ref v i)
                (let loop ((j startj))
                  (if (<= j max-index)
                      (begin (vector-set! v j #f) (loop (+ j p)))))
                  (loop (+ 1 i) (cons p ps)))
              (else (loop (+ 1 i) ps)))))))

(display (length (primes 15485863)))


Output:
1
1000000


Create a new paste based on this one


Comments:
posted by pbewig on Jan 23
The first million primes by the Sieve of Eratosthenes.
reply