(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)))