H.G. le Roy wrote:
Hi,
I'm stuck with Problem 10
(http://projecteuler.net/index.php?section=problems&id=10
<http://projecteuler.net/index.php?section=problems&id=10>) :-)
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
for j in xrange(len(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)
I know prime # algorithms have been discussed on at least one of the
Python lists, and are also found in various internet resources.
Without consulting them let me offer:
- odd prime numbers are = 6x-1 or 6x+1 where x is integer.
That reduces the # of candidates.
- the highest candidate you need to test is <= the square root of the
candidate.
That reduces cycles of the inner for loop
- there is no need to initialize remprod
- you can use "for j in pz:" to access successive pz's
in which case you'd write i % j
- there is no need to multiply remprod by the remainders as you don't
use that result later.
--
Bob Gailer
Chapel Hill NC
919-636-4239
_______________________________________________
Tutor maillist - Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor