Dr. Phillip M. Feldman wrote:
I wrote the following correct but inefficient test of primality for purposes
of demonstrating that the simplest algorithm is often not the most
efficient.  But, when I try to run the following code with a value of n that
is large enough to produce a significant amount of running time, I get an
out-of-memory error!

def is_prime(n):
   for j in range(2,n):
      if (n % j) == 0: return False
   return True

It seems as though Python is actually expanding range(2,n) into a list of
numbers, even though this is incredibly wasteful of memory. There should be
a looping mechanism that generates the index variable values incrementally
as they are needed.

You already have an answer to the range issue, so I will only add that putting a loop inside another loop is a decent way to expand the time taken.

I will also observe that if you were to stop programming whatever language you are more familiar with in Python, and start programming Python in Python, you'll have an easier time of it.

The Dive Into Python is an excellent start for that.

~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to