[Tutor] primes (generator)

Gregor Lingl glingl at aon.at
Sun Mar 20 20:18:03 CET 2005


Karl Pflästerer schrieb:
> On 19 Mrz 2005, glingl at aon.at wrote:
> 
> [Code]
> 
>>Maybe sombody likes...
> 
> 
> I did it ... :
> 
> def sieve (max):
>     max = max + 1
>     border = round(max**0.5)
>     nums = range(0, max)
>     nums[0] = nums[1] = None
>     for p in nums:
>         if p:
>             if p >= border: break 
>             for i in xrange(p+p, max, p):
>                 nums[i] = None
>     return filter(None, nums)
> 

Hi Karl!

The following variation of your sieve, using
extended slice assignment  seems to
be sgnificantly faster. Try it out, if you like.

def sieve (maximum):
     limit = int(maximum**0.5)
     nums = range(maximum+1)
     nums[0] = nums[1] = None
     for p in nums:
         if p:
             if p > limit: break
             nums[p*p:maximum+1:p] = [False]*(1-p+maximum//p)
     return filter(None, nums)

Regards
Gregor


> 
> 
>    Karl


More information about the Tutor mailing list