26 lines
654 B
Scheme
26 lines
654 B
Scheme
(module sieve mzscheme
|
|
|
|
(define (main args)
|
|
(let ((n (if (= (vector-length args) 0)
|
|
1
|
|
(string->number (vector-ref args 0))))
|
|
(count 0)
|
|
(flags (make-vector 8192)))
|
|
(let loop ((iter n))
|
|
(if (> iter 0)
|
|
(begin
|
|
(do ((i 0 (+ i 1))) ((>= i 8192)) (vector-set! flags i #t))
|
|
(set! count 0)
|
|
(do ((i 2 (+ 1 i)))
|
|
((>= i 8192))
|
|
(if (vector-ref flags i)
|
|
(begin
|
|
(do ((k (+ i i) (+ k i)))
|
|
((>= k 8192))
|
|
(vector-set! flags k #f))
|
|
(set! count (+ 1 count)))))
|
|
(loop (- iter 1)))))
|
|
(display "Count: ") (display count) (newline)))
|
|
|
|
(main (current-command-line-arguments)))
|