【发布时间】:2021-11-18 19:05:18
【问题描述】:
我知道如何使用蛮力方法检查数字是否可以表示为两个平方和。
def sumSquare( n) :
i = 1
while i * i <= n :
j = 1
while(j * j <= n) :
if (i * i + j * j == n) :
print(i, "^2 + ", j , "^2" )
return True
j = j + 1
i = i + 1
return False
但是如何为 n 个不同的正整数做到这一点。所以问题是:
检查数字是否可以写为“n”个不同平方之和的函数
我有一些例子。
例如
- is_sum_of_squares(18, 2) 将是错误的,因为 18 可以写成两个平方的和 (3^2 + 3^2),但它们并不不同。
- (38,3) 为真,因为 5^2+3^2+2^2 = 38 和 5!=3!=2。
我无法扩展if 条件以获得更多值。我认为这可以通过递归来完成,但我有问题。
我发现这个函数非常有用,因为它可以找到数字可以分割成的平方数。
def findMinSquares(n):
T = [0] * (n + 1)
for i in range(n + 1):
T[i] = i
j = 1
while j * j <= i:
T[i] = min(T[i], 1 + T[i - j * j])
j += 1
return T[n]
但我又不能用递归来做到这一点。可悲的是,我无法绕过它。我们几周前开始学习它(我在高中),它与迭代方法有很大不同。
【问题讨论】: