Confusing performance results for prime

Georgy Pruss SEE_AT_THE_END at hotmail.com
Sat Oct 18 02:03:59 EDT 2003


I did the tests for the original Primes1 & 2 (only changed
range --> xrange and sqrt --> int(sqrt)) and your Primes3

Primes1: 9592 primes up to 100000 in 0.547 secs
Primes2: 9592 primes up to 100000 in 0.813 secs (+48.6%)
Primes3: 9592 primes up to 100000 in 0.578 secs (+5.7%)

Primes1: 49098 primes up to 600000 in 5.047 secs
Primes2: 49098 primes up to 600000 in 8.844 secs (+75.2%)
Primes3: 49098 primes up to 600000 in 5.922 secs (+17.3%)

Primes1: 107126 primes up to 1400000 in 14.469 secs
Primes2: 107126 primes up to 1400000 in 27.453 secs (+89.7%)
Primes3: 107126 primes up to 1400000 in 17.203 secs (+18.9%)

Georgy
E^mail: 'ZDAwMTEyMHQwMzMwQGhvdG1haWwuY29t\n'.decode('base64')


"Bengt Richter" <bokr at oz.net> wrote in message news:bmqfp9$1fu$0 at 216.39.172.122...
> <...>
> Sorry, I can't resist suggesting a slight speed improvement ;-)
>
> def Primes3(prime_range_top):
>     primes = [2]
>     for prime_candidate in xrange(3,prime_range_top,2):
>         for p in primes:
>             if prime_candidate%p==0: break
>             if p*p>prime_candidate:
>                 primes.append(prime_candidate)
>                 break
>         else:
>             primes.append(prime_candidate)
>     return primes
>
> And maybe running the bunch with
>
> if __name__ == "__main__":
>     n=100000
>     times = []
>     for pfun in (Primes1, Primes2, Primes3):
>         tb = time.time()
>         l1 = pfun(n)
>         dt = time.time() - tb
>         times.append(dt)
>         print '%s: %s primes up to %s in %5.3f secs' % (
>             pfun.__name__, len(l1), n, dt)
>     fastest = min(times)
>     print '\nTimes relative to the fastest:'
>     for i, pfun in enumerate((Primes1, Primes2, Primes3)):
>         print '%s: %5.3f'%(pfun.__name__, times[i]/fastest)
>
> Which gave me (on older machine ;-)
>
> Primes1: 9592 primes up to 100000 in 2.984 secs
> Primes2: 9592 primes up to 100000 in 5.608 secs
> Primes3: 9592 primes up to 100000 in 2.444 secs
>
> Times relative to the fastest:
> Primes1: 1.221
> Primes2: 2.295
> Primes3: 1.000
>
> Regards,
> Bengt Richter






More information about the Python-list mailing list