【发布时间】:2019-05-05 12:00:27
【问题描述】:
我正在做名为 Integers: Recreation One in Codewars 的编码挑战。
Challenge => 给定两个整数 m, n (1
def list_squared(m, n):
lst = list()
for num in range(m, n+1):
total= 0
for i in range(1, num//2 +1):
if num % i == 0:
total += i**2
total += num**2
if (total**(1/2)) % 1 == 0:
lst.append([num, total])
return lst
我的代码适用于示例测试,但是当我尝试提交它时,它给了我“执行超时”错误。我想我必须提高效率,但不知道该怎么做。如何让代码更高效?
【问题讨论】:
-
不会更快,但我觉得第二个循环要么是
range(1,num+1),要么应该是total+=i**2+(num/i)**2,如果本身是平方数,最后减去num.在这两种情况下,total+=num**2行都感觉不对。 -
啊,对于
total+=i**2+(num/i)**2变体,内部循环不应该转到num/2,而是转到sqrt(num)。我认为这就是事情可以变得更快的地方。 -
@SuperKogito 1) 那个话题是
Ruby,这个问题是Python。 2)该主题中公认的答案产生了错误的结果,每个人似乎都对此非常满意.... -
我的错,我刚读了这个问题,它很相似。
标签: python