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

Python中的SPOJ 91(两个正方形或非两个正方形)优化,python,optimization,Python,Optimization,我试图通过尝试SPOJ问题来练习python,我有点被困在 我使用了程序的逻辑,但在测试解决方案时,我一直会遇到“超过时间限制”的错误。 代码如下: 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

我试图通过尝试SPOJ问题来练习python,我有点被困在

我使用了程序的逻辑,但在测试解决方案时,我一直会遇到“超过时间限制”的错误。 代码如下:

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'
导入系统导入数学
def系数(n):
d=2
primfac=[]
虽然d*d您的代码在提交时(Python2.7)会产生错误的答案,但不会超过时间限制。对于输入值2,它错误地打印“否”