优化python代码

时间:2017-07-09 18:04:37

标签: python

我正在尝试优化此代码(给定两个整数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

2 个答案:

答案 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