stream based sieve; code is in runtime/stream.scm (MIT Scheme) added by mejja on Wed May 11 07:24:09 2016
(declare (usual-integrations)) (define (sum-first-n-primes n) (let loop ((str (make-prime-numbers-stream)) (sum 0) (nth 0)) (if (< nth n) (loop (force (cdr str)) (+ sum (car str)) (+ nth 1)) (list 'running-sum= sum 'primes-summed= nth 'next-prime= (car str))))) (define (sum-primes-below max) (let loop ((str (make-prime-numbers-stream)) (sum 0) (nth 0)) (if (< (car str) max) (loop (force (cdr str)) (+ sum (car str)) (+ nth 1)) (list 'running-sum= sum 'primes-summed= nth 'next-prim= (car str))))) ;(stream-head prime-numbers-stream 20) ;Value 54: (2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71) (sum-primes-below 30) ;Value 55: (running-sum= 129 primes-summed= 10 next-prim= 31) (sum-first-n-primes 10) ;Value 56: (running-sum= 129 primes-summed= 10 next-prime= 31) ;(sum-primes-below 1000000) ;Value 61: (running-sum= 37550402023 primes-summed= 78498 next-prim= 1000003) ;(sum-primes-below 2000000) ;Value 62: (running-sum= 142913828922 primes-summed= 148933 next-prim= 2000003) ;(sum-first-n-primes 1000000) ;Value 63: (running-sum= 7472966967499 primes-summed= 1000000 next-prime= 15485867) ;(sum-first-n-primes 2000000) ;Value 64: (running-sum= 31381137530481 primes-summed= 2000000 next-prime= 32452867)