Python overflowerror

I am using Python 2.7 and I am getting the following error. How can I fix it?

for y in range(1, x/2):

OverflowError: range() result has too many items

CODE:

# Largest Prime Factor
prime = True
x = 600851475143
pNum = 0
for y in range(2, x/2):
    if (x % y == 0): # Found a factor
        for z in range(2, y/2): # Checking factor for prime
            if (y % z == 0): #
                prime = False
                break
        if (prime == True):
            pNum = y
        prime = True
print pNum

Answers


Try xrange in stead of range.

http://docs.python.org/2/library/functions.html#xrange


In python 2.x range() returns a list, which is limited in capacity (by both available memory and max long 2^64 -1 for 64-bit Py) and thus likely to produce OverflowError with large datasets.

So, the prescribed solution is to use xrange() which returns a generator which doesn't have a fixed capacity or bound by int or long numbers for indexing.


In python 2.x, range(1, n) create a list of n-1 items.

Use xrange unless you really need all that items at once.

UPDATE

According to xrange documentation:

CPython implementation detail: xrange() is intended to be simple and fast. Implementations may impose restrictions to achieve this. The C implementation of Python restricts all arguments to native C longs (“short” Python integers), and also requires that the number of elements fit in a native C long. If a larger range is needed, an alternate version can be crafted using the itertools module: islice(count(start, step), (stop-start+step-1+2*(step<0))//step).

Complete example that use itertools.islice, itertools.count:

from itertools import islice, count

prime = True
x = 600851475143
pNum = 0
for y in islice(count(2), x/2-2):
    if (x % y == 0): # Found a factor
        for z in islice(count(2), y/2-2): # Checking factor for prime
            if (y % z == 0): #
                prime = False
                break
        if (prime == True):
            pNum = y
        prime = True
print pNum

Need Your Help

Salesforce – Notify external API (or create activity event) on custom object change

salesforce

I need a fairly trivial thing: every time a user changes a salesoforce custom object field, I need to notify the external service about the change.

Mercurial push, abort: authorization failed

apache mercurial https apache2 repository

I'm having problems with pushing to mercurial repository: