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
答案 0 :(得分: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
这里只进行一次迭代,直到平方根。第一个if
检查n
是否是两个相等正方形的总和(如8 = 4 + 4),因为for
循环中未涵盖此情况。
答案 1 :(得分:0)
你必须测试所有值,如果第一次尝试不相等则不返回。
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)
答案 2 :(得分:0)
它不正确,因为无论n是什么,该功能将在第一次检查后返回。您应该将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从i开始会更好:
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