我正在尝试编写一个名为sum_square_difference
的函数,它取一个数字n并返回前n个自然数的平方和与它们之和的平方之间的差值。
我想我知道如何编写一个定义平方和的函数
def sum_of_squares(numbers):
total = 0
for num in numbers:
total += (num ** 2)
return(total)
我试图实现一个sums函数的平方:
def square_sum(numbers):
total = 0
for each in range:
total = total + each
return total**2
我不知道如何组合函数来区分,我不知道我的函数是否正确。
有什么建议吗?我使用的是Python 3.3
谢谢。
答案 0 :(得分:9)
这个函数可以用纯数学写成:
翻译成Python:
def square_sum_difference(n):
return int((3*n**2 + 2*n) * (1 - n**2) / 12)
该公式简化了另外两个公式:
def square_sum_difference(n):
return int(n*(n+1)*(2*n+1)/6 - (n*(n+1)/2)**2)
n*(n+1)*(2*n+1)/6
是描述here的公式,它返回第一个n
自然数的平方和。
(n*(n+1)/2))**2
使用三角数公式,它是第一个n
自然数的总和,然后是平方。
这也可以使用内置的sum
函数完成。这是:
def sum_square_difference(n):
r = range(1, n+1) # first n natural numbers
return sum(i**2 for i in r) - sum(r)**2
range(1, n+1)
生成第一个n
自然数的迭代器。
>>> list(range(1, 4+1))
[1, 2, 3, 4]
sum(i**2 for i in r)
返回r中数字的平方和,sum(r)**2
返回r中数字总和的平方。
答案 1 :(得分:4)
#正如beta所说,
#(sum(i))^ 2 - (sum(i ^ 2))很容易计算:)
#A = sum(i)= i *(i + 1)/ 2
#B = sum(i ^ 2)= i *(i + 1)*(2 * i + 1)/ 6
#A ^ 2 - B = i(i + 1)(3(i ^ 2) - i - 2)/ 12
#:)
#no loops ...只是一个公式!**
答案 2 :(得分:3)
这是预先计算数学的一种情况。您可以为平方和和和的平方推导出闭式解。然后代码是微不足道的(和O(1))。
需要两种解决方案的帮助吗?
答案 3 :(得分:2)
def sum_square_difference(n):
r = range(1,n+1)
sum_of_squares = sum(map(lambda x: x*x, r))
square_sum = sum(r)**2
return sum_of_squares - square_sum
答案 4 :(得分:2)
在Ruby语言中,您可以通过这种方式实现这一目标
def diff_btw_sum_of_squars_and_squar_of_sum(from=1,to=100) # use default values from 1..100.
((1..100).inject(:+)**2) -(1..100).map {|num| num ** 2}.inject(:+)
end
diff_btw_sum_of_squars_and_squar_of_sum #call for above method