[Edu-sig] what? (late nite entertainment) (*)

Trent Oliphant trent at oliphant.org
Thu Jan 29 11:25:54 EST 2004


Thank you for this little puzzle intro to extended slice notation.  I 
didn't fully understand what it was doing until I walked through it line 
by line in the interpreter and inserted a print statement for each step 
in the while loop.

Now, I won't claim to be a mathmetician (I'm not even sure I spelled it 
correctly), and so won't chime in on the 1 being prime issue, but if you 
wanted to include it in the return - you could do the following:

def primes(n):
    sieve, zeros = range(n), [0]*n
    i = 2
    while i*i < n:
        if sieve[i]: sieve[i*i:n:i]=zeros[i*i:n:i]
        i += 1
    return [p for p in sieve if p]


Trent

> what() was intended to generate all primes less than n. (In fact it's
> an implementation of the sieve of Eratosthenes). The bugs came not
> only from not beeing interested in primes less than 2  ;-) but also from
> beeing a little tired already. Sorry.
> 
> I think the following version repairs that - and hopefully uses less
> obfuscating variable names (which in fact originally was part of the
> "riddle"):
> 
> def primes(n):
>    sieve, zeros = range(n), [0]*n
>    sieve[:2]= 0,0
>    i = 1
>    while i*i < n:
>        if sieve[i]: sieve[i*i:n:i]=zeros[i*i:n:i]
>        i += 1
>    return [p for p in sieve if p]
> 
> Regards,
> Gregor
> 






More information about the Edu-sig mailing list