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)