Boykie Mackay wrote:
> Ok,I have learnt how to generate prime numbers and how to 'split'
> input.The above was to help me solve the second 'SPOJ'
> challenge,PRIME1.The challenge can be found at
> <https://www.spoj.pl/problems/classical/sort=0,start=0>
>
> I have written my solution and tested it and it works fine,but
> unfortunately it is times out when tested by 'SPOJ'.I don't know whether
> it times out because it is inherently slow or because a certain
> condition takes it into endless loops.I think it is simply because it
> needs further optimisation.I have researched as much as I could but
> can't find any way to improve the speed of the program (problem with
> being a newbie is you don't know what you don't know!)
>
One optimization, and this is only good for printing a list of primes,
is that you only need to test a number's divisibility by all *primes*
less than the square root of the number.
By keeping a list of the primes already calculated, I saw a 3 times
increase in speed counting all the prime numbers between 2 and one million:
# test all numbers below sqrt(n)
ebrunsonlx(~)$ time python primes.py
78498 primes below 1000000
real 0m14.496s
user 0m14.367s
sys 0m0.127s
# keeping a list of primes
ebrunsonlx(~)$ time python primes.py
78498 primes below 1000000
real 0m5.570s
user 0m5.551s
sys 0m0.017s
Here's the code I used:
primes = []
def isPrime1( n ):
s = n**.5
for d in xrange( 2, int(s)+1 ):
if not n%d:
return False
return True
def isPrime2( n ):
global primes
s = n**.5
for d in primes:
if d>s:
break
if not n%d:
return False
primes.append( n )
return True
That's just the most obvious optimization. I'd like to compare to the
performance of Sieve of Eratosthanes, but I don't feel like coding it.
> Could you please look at the program (attached) and advise possible
> optimisations or point me to possible resources that would help solve
> this challenge.
>
> Thanks,
>
> Boyks
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Tutor maillist - [email protected]
> http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor