> (list-ref primes 50)
233
原帖由 MMMIX 于 2008-9-21 01:59 发表
我觉着 integers 的定义可以优化下
PLT Scheme 实现
#lang lazy
(define (integers n)
(cons n (integers (+ n 2))))
(define (sieve seq)
(let ((p (car seq)))
(cons p (sieve
...
s1.png (44.89 KB, 下载次数: 86)
s2.png (42.41 KB, 下载次数: 80)
(xs', xs'') = break (>= x*x) xs,这里是给 xs' 和 xs'' 绑定值吗?如果是,分别绑定了什么?
但是你分段的时候,是通过计算平方来判断的,这与直接拿 p 来模相比,效率不会有明显改进。而且,用 p 来模可以去掉一些合数,计算平方并不能去掉合数,仅仅是把淘汰的工作留给 p 之前的素数了。基于这些分析,第二段代码性能可能不如第一段。
lee@debian:~/tmp/sieve$ time ./sieve0 10000 -- 未加平方优化的版本
104743
real 0m26.741s
user 0m26.698s
sys 0m0.024s
lee@debian:~/tmp/sieve$ time ./sieve3 10000 -- 上述加了平方优化的版本
104743
real 0m19.842s
user 0m19.733s
sys 0m0.020s
primes: Efficient, purely functional generation of prime numbers
This Haskell library provides an efficient lazy wheel sieve for prime generation inspired by Lazy wheel sieves and spirals of primes by Colin Runciman and The Genuine Sieve of Eratosthenes by Melissa O'Neil.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |