2017-03-19 4 views
-2
def sum_of_squares(n): 
    for i in range(1, n): 
    for j in range(1, n): 
     if n == i*i + j*j: 
     return True 
     break 
     else: 
     return False 
+3

と思われますが、どうやって試してみませんか?また、 'return'の後の' break'も役に立ちません。そして、効率のために 'sqrt(n)'までループすることもできます。 – Julien

+3

なぜそれが正しいか尋ねていますか? **テストしてください!** – jonrsharpe

+2

いいえ、 '1 * 1 + 1 * 1'をテストした後に戻ります。なぜ見えますか? –

答えて

2

より効率的な方法は、そのようにそれを行うには、次のようになります。

import math 
def is_sum_of_squares(n): 
    s=set() 
    if 2*int(math.sqrt(n/2.0))**2==n: 
     return True 
    for i in range(1,int(math.sqrt(n)+1)): 
     if n-i**2 in s: 
      return True 
     else: 
      s.add(i**2) 
    return False 

ここでは、反復は1回だけ行い、平方根まで行います。最初のifは、forループではカバーされていないため、nが2つの等号(8 = 4 + 4など)の合計であるかどうかをチェックします。

0

すべての値をテストし、最初のtryが等しくない場合は戻らないでください。

def sumofsquares(n): 
    for i in range(1, n): 
    for j in range(1, n): 
     if n == (i*i) + (j*j): 
     return (true) 
    return (false) 

あなたもPOWを使用することがあります。

pow(i, 2) + pow(j, 2) 

か:

(i**2) + (j**2) 
0

を、nが何であるかに関係なく、関数が最初のチェックの後に返されますされますので、それは正しくありません。あなたのような2つのループのうちのreturn Falseを置く必要があります。

def sumofsquares(n): 
for i in range(1, n): 
    for j in range(1, n): 
     if n == ((i * i) + (j * j)): 
      return True 
return False 

jは私から始まる場合、それは良いだろう:

def sumofsquares(n): 
    for i in range(1, n): 
     for j in range(i, n): 
      if n == ((i * i) + (j * j)): 
       return True 
    return False 
関連する問題