Remarkable results with psyco and sieve of Eratosthenes

George Sakkis george.sakkis at gmail.com
Thu Nov 30 02:15:03 CET 2006


Will McGugan wrote:
> > #!/usr/bin/python -OO
> > import math
> > import sys
> > import psyco
> >
> > psyco.full()
> >
> > def primes():
> >     primes=[3]
> >     for x in xrange(5,10000000,2):
> >         maxfact = int(math.sqrt(x))
> >         flag=True
> >         for y in primes:
> >             if y > maxfact:
> >                 break
> >             if x%y == 0:
> >                 flag=False
> >                 break
> >         if flag == True:
> >             primes.append(x)
> > primes()
> >
>
> Some trivial optimizations. Give this a whirl.
>
> def primes():
>      sqrt=math.sqrt
>      primes=[3]
>      for x in xrange(5,10000000,2):
>          maxfact = int(sqrt(x))
>          for y in primes:
>              if y > maxfact:
>                  primes.append(x)
>                  break
>              if not x%y:
>                  break
>      return primes

You can also save an attribute lookup for append; just add
append = primes.append
outside of the loop and replace primes.append(x) with append(x)
That should cut down a few fractions of second.

George




More information about the Python-list mailing list