2017-07-09 14 views
0

私はこのコードを最適化しようとしています(2つの整数m、n(1 < = m < = n)とすると、mとnの間のすべての整数を見つけることができます。平方)。私は、コードに新たなんだと私はrange(1,i+1)です私はあなたが最適化することができます注意して、このコンセプト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。ただし、このサイトは幅広い最適化に関する質問ではありません。おそらく[コードレビュー](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

まず最初に苦労しています。最初はres=1に設定し、最初のサイクルを避けて2から範囲を開始することができます。重要な最適化は最後にあります。その後ろに整数除数がないので、i/2の後に停止できますが、dispair caseを含めることを忘れないでください(たとえば、3/2 = 1.5は範囲の有効な入力ではありません)。 ceil周りの区分の。結論では、簡単な最適化はrange(2, ceil(i/2)+1) res = 1である