On Fri, Feb 6, 2009 at 4:19 PM, H.G. le Roy <hgle...@gmail.com> wrote:

> A part of my code deals with the calculation of prime numbers. However it is
> really slow. Hopefully you have some ideas how to make it faster.
>
> pz = [2]
> # only iterate over odd numbers
> for i in xrange(3,2000000,2):
>   remprod = 1  # product of remainders

Not sure why you accumulate the products, just keep a flag or use an
else clause on the for loop.

>   for j in xrange(len(pz)):
for p in pz:
>     remprod *= (i % pz[j])
>     if remprod == 0:  # if a number is divisible wo remainder its not prime
>       break
>   if remprod > 0:
>     pz.append(i)

You inner loop could be (not tested)
for p in pz:
  if i % p == 0:
    break
else:
  pz.append(i)

You might search the archives for more ideas, this is a popular
question. There is a very slick Python implementation of the Sieve of
Eratosthenes that uses slice assignment to mark off the non-primes.

Kent
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to