18 lines
548 B
Scheme
18 lines
548 B
Scheme
(import (goof))
|
|
(define (erathostenes n)
|
|
(define vec (make-vector n #t))
|
|
(loop ((:for i (up-from 2 (:to n)))
|
|
(:when (vector-ref vec i))
|
|
(:acc lst (listing i))
|
|
(:for j (up-from (* 3 i) (:to n) (:by (* i 2)))))
|
|
=> lst
|
|
(vector-set! vec j #f)))
|
|
|
|
(define (erathostenes2 n)
|
|
(define vec (make-vector n #t))
|
|
(loop/list ((:for i (up-from 2 (:to n)))
|
|
(:when (vector-ref vec i)))
|
|
;; Here we set all multiples of i to #f
|
|
(loop ((:for j (up-from (* 3 i) (:to n) (:by (* i 2)))))
|
|
(vector-set! vec j #f))
|
|
i))
|