我正在尝试优化此代码(给定两个整数m,n(1 <= m <= n)我们想要找到m和n之间的所有整数,其平方除数之和本身就是广场)。我是编码的新手,我很难用这个概念
def list_squared(m, n):
# your code
import math
MyList = []
for i in range(m,n):
A=[]
for k in range(1,i+1):
if i%k == 0:
A.append(k**2)
if round(math.sqrt(sum(A))) == math.sqrt(sum(A)):
B =[]
B.append(i)
B.append(sum(A))
MyList.append(B)
return MyList
答案 0 :(得分:0)
import math
def list_squared(m, n):
MyList = []
for i in range(m,n):
res=0
for k in range(1,i+1):
if i%k == 0:
res+=k**2
if res == int(math.sqrt(res))**2
MyList.append(i)
return MyList
答案 1 :(得分:0)
我注意到你可以优化的第一件事是res=1
。您可以初始设置ceil
并从2开始,避开第一个周期。最后的重要优化是:你可以在i / 2之后停止,因为它之后没有整数除数但是记得要包含绝望的情况(例如3/2 = 1.5不是范围的有效输入)所以包装结果range(2, ceil(i/2)+1)
函数的除法。总之,简单的优化是{{1}},其中res = 1