(define (fib n)
(fib-iter 1 0 0 1 n))
(define (fib-iter a b p q count)
(cond ((= count 0) b)
((even? count)
(fib-iter a
b
(+ (* p p) (* q q))
(+ (* 2 p q) (* q q))
(/ count 2)))
(else (fib-iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1)))))
int primesFound = 0;
printf("Primes for %d integers\n", LISTSIZE);
for(int i=0; i < LISTSIZE; i++)
{
if(list[i] > 0)
{
primesFound++;
printf("-- %d --\n", list[i]);
}
}
printf("Total primes found: %d (estimate was %d)\n", primesFound, primeEstimate);
return 0;
}
Name:
Anonymous2008-10-12 9:34
primeSieve n = sieve 3 (listArray (1, n) (False : True : cycle [True, False]) :: UArray Integer Bool)
where sieve i a
| i > limit = a
| a ! i = sieve (i + 1) a'
| otherwise = sieve (i + 1) a
where a' = a // zip [i * i, i * i + 2 * i .. n] (repeat False)
limit = floor (sqrt (fromInteger n))
: sieve ( limit -- table size )
1+ dup allocate throw 2dup swap true fill
false over c! false over 1+ c!
over 4 +do false over i + c! 2 +loop
over sqrt 1+ 2 +do
dup i + c@ if
over i dup * +do
false over i + c!
j 2 * +loop
endif
loop swap ;
: .table ( table size -- )
2 +do dup i + c@ if i . endif loop ;