在我的平方和代码中找不到错误

时间:2017-03-19 10:28:59

标签: python

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

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