Python中的SPOJ 91(两个正方形或不是两个正方形)优化

时间:2014-08-18 14:17:25

标签: python optimization

我试图通过尝试SPOJ问题练习python而且我有点卡在91st problem

我已将Fermat's Theorem for sum of 2 squares用于程序的逻辑,但在测试解决方案时,我不断收到“超出时间限制”错误。 下面是代码:

import sys import math

def factor(n):
    d=2
    primfac = []

    while d*d <= n:
        while n%d == 0:
            primfac.append(d)
            n/=d
        d+=1
    return primfac

def fun(num):
    factors = factor(num)
    r=0
    prevr = 0
    inc=1

    if factors == [] and num%4==1:
        return 1

    for f in factors:
        if f%2!=0 and f%4==3:
            r=f
            if r==prevr:
                inc+=1
            prevr = f

    if inc%2==0:
        return 1

    return 0


if __name__ == '__main__':
    x=0
    for line in sys.stdin:
        if(x==0):
            x=1
            continue

        n = int(line)

        if(fun(n) == 1):
            print 'Yes'
        else:
            print 'No'

我猜可能会有一些优化和小调整我可以添加以使代码运行更快,但我不知道他们是什么..请帮忙!

1 个答案:

答案 0 :(得分:0)

您的代码在提交时(Python 2.7)会产生错误答案,而不会超出时间限制。对于输入值2,它错误地打印“否”。