我试图通过尝试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'
我猜可能会有一些优化和小调整我可以添加以使代码运行更快,但我不知道他们是什么..请帮忙!
答案 0 :(得分:0)
您的代码在提交时(Python 2.7)会产生错误答案,而不会超出时间限制。对于输入值2,它错误地打印“否”。