2017-07-09 163 views
0

我试图优化这段代码(给定两个整数m,n(1 < = m < = n)我们希望找到所有m和n之间的整数,其平方因数的总和本身就是广场)。我是新来的编码,我有这个概念优化python代码

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

欢迎来到您的第一个问题在StackOverflow。但是,该网站不适用于广泛的优化问题。也许你应该试试[Code Review](https://codereview.stackexchange.com/)。但一定要阅读他们的旅程并遵循他们的质量标准。 –

+2

[我怎样才能检查一个数字是否是一个完美的正方形?](https://stackoverflow.com/questions/2489435/how-could-i-check-if-a-number-is-a-perfect -广场) –

回答

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 
0

第一件事,我注意到,你可以优化一个很难为range(1,i+1)。您可以初始设置res=1,并从2开始避开第一个循环。重要的优化是最终的:你可以在i/2之后停止,因为它后面没有整数除数,但记得包括绝对大小写(例如3/2 = 1.5不是范围的有效输入),因此包装结果围绕ceil功能划分。总之,一个简单的优化是range(2, ceil(i/2)+1)与res = 1