[Edu-sig] Pythonic Math must include...
michel paul
mpaul213 at gmail.com
Mon Jan 19 02:04:27 CET 2009
On Sun, Jan 18, 2009 at 3:31 PM, Gregor Lingl <gregor.lingl at aon.at> wrote:
> Michel Paul's code:
>
> def primes():
> sofar = [-1, 2,3] # a running start, -1 proposed by J.H. Conway
> yield sofar[0] # get these out of the way
> yield sofar[1] # the only even prime
> yield sofar[2] # and then 3
> candidate = 5 # we'll increment from here on
> while True: # go forever
> for factor in sofar[1:]: # skip -1 (or don't use it in the first
> place)
> if factor ** 2 > candidate: # did we pass?
> yield candidate # woo hoo!
> sofar.append(candidate) # keep the gold
> break # onward!
> if not candidate % factor: # oops, no remainder
> break # this is a composite
> candidate += 2 # next odd number please
>
> Time: 100000: 1.58 s 500000: 32.25 s
> -----
Actually, that's Kirby's code.
This is what I sent:
def primes():
p = [-1, 2, 3]
for x in p: yield x
def is_prime(n):
for factor in p[1:]:
if factor**2 > n: return True
if n%factor == 0: return False
multiple = 6
while True:
if is_prime(multiple-1): yield multiple-1; p.append(multiple-1)
if is_prime(multiple+1): yield multiple + 1; p.append(multiple+1)
multiple += 6
Is this what was tested? Or what was listed? Just curious.
> I've modified this one slightly, with a surprising effect
> (I conjecture mainly due to avoiding copying p repeatedly):
>
> def primes():
> yield(-1)
> p = [2, 3]
> for x in p: yield x
> def is_prime(n):
> for factor in p:
> if factor**2 > n: return True
> if n%factor == 0: return False
> multiple = 6
> while True:
> for cand in multiple-1, multiple+1:
> if is_prime(cand):
> yield cand
> p.append(cand)
> multiple += 6
>
> Time: 100000: 0.14 s 500000: 1.05 s
> -----
>
>
Yeah, I like the 'for cand in multiple-1, multiple+1'. I actually did do it
that way on a previous occasion. So this is very interesting.
- Michel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20090118/f4fb678d/attachment.htm>
More information about the Edu-sig
mailing list