长整数溢出错误和分辨率

时间:2013-06-29 19:55:02

标签: python optimization python-2.7

我正在编写一个程序,它给我一个溢出错误。我意识到原因是由于我的输入可以输入直到2147483646.我使用sys.maxint来计算。除此之外的任何事情都给我一个溢出错误。我如何接受大值的输入?对于值,2147483646我的系统挂起。如何处理这样的错误。这里给出了问题的陈述,如果数字的总和以及其数字的平方和是素数,则该数字称为幸运数字。 A和B之间有多少数字是幸运的?

我在这里附上示例代码。

class luckynumbers():
    #required numbers are only 0-9, their values can be stored in a lookup table
    def __init__(self):
            self.squarelist=[0,1,4,9,16,25,36,49,64,81]

    def isEven(self, n):
            if n%2 ==0:
                    return True
            else:
                    return False

    def isPrime(self,n):
            return_val=True
            if n==2:
                    return_val= True
            if not self.isEven(n):
                    for i in xrange(2,n/2):
                            if n%i ==0:
                                    return_val=False
                                    break
            else:
                    return_val= False
            return return_val

    def sumofDigits(self,n):
            return sum(map(int, n))

    def generateSquares(self, n):
            return map(lambda x: self.squarelist[x], map(int,n))

    def satisfy(self,n):
            return self.isPrime(self.sumofDigits(n)) and self.isPrime(sum(self.generateSquares(n)))

def main():
    luckyno=luckynumbers()
    t=int(raw_input().rstrip())
    count = []
    for i in xrange(t):
            counts = 0
            a,b = map(int, raw_input().rstrip().split())
            if a==1:
                    a=2
            for j in xrange(a,b+1,1):
                     if luckyno.satisfy(str(j)):
                            counts+=1
            count.append(counts)
    for i in count:
            print i

if __name__=='__main__':
    main()

我仍然在python中查看长整数文档。但尚未想出办法。据我所知,我试图使用优化。还有更多,我真的很感激。

1 个答案:

答案 0 :(得分:0)

xrange()函数仅限于int(不是long)。如果仅使用xrange()调用替换发生OverflowError的range()调用,代码将按预期工作。