Range is too large Python

前端 未结 6 1433
逝去的感伤
逝去的感伤 2020-12-08 21:39

I\'m trying to find the largest prime factor of the number x, Python gives me the error that the range is too large. I\'ve tried using x range but I get an OverflowError: Py

6条回答
  •  悲哀的现实
    2020-12-08 22:26

    I would definitely stick with xrange since creating a list between 0 and what looks like a number rivaled by infinity would be taxing for memory. xrange will generate only the numbers when asked. For the number too large problem, you might want to try a "long". This can be achieved by writing a L on the end of the number. I made my own version to test it out. I put in a small sleep as to not destroy my computer into virtually a while(1) loop. I was also impatient to see the program come to a complete end, so I put in print statements

    from time import sleep
    
    x = 600851475143L
    maxPrime = 0
    
    for i in xrange(1,x):
        isItPrime = True
        if (x%i) == 0:
            for prime in xrange(2,i-1):
                if (i%prime) == 0:
                    isItPrime = False
                    break
            if isItPrime:
                maxPrime = i
                print "Found a prime: "+str(i)
        sleep(0.0000001)
    
    
    print maxPrime
    

    Hope this helps!

    EDIT: I also did a few more edits to yield this version. It is fairly efficient and I checked quite a few numbers this program provides (it seems to check out so far):

    from time import sleep
    
    x = 600851475143L
    
    primes = []
    
    for i in xrange(2,x):
        isItPrime = True
        for prime in primes:
            if (i%prime) == 0:
                isItPrime = False
                break
        if isItPrime:
            primes.append(i)
            print "Found a prime: "+str(i)
        sleep(0.0000001)
    
    
    print primes[-1]
    

提交回复
热议问题