[英]Function to calculate the difference between sum of squares and square of sums
我正在尝试编写一个名为sum_square_difference
的函数,它接受一个数字 n 并返回前 n 个自然数的平方和与其总和的平方之间的差。
我想我知道如何编写一个定义平方和的函数
def sum_of_squares(numbers):
total = 0
for num in numbers:
total += (num ** 2)
return(total)
我试图实现一个平方和函数:
def square_sum(numbers):
total = 0
for each in range:
total = total + each
return total**2
我不知道如何组合函数来区分,也不知道我的函数是否正确。
请问有什么建议吗? 我正在使用 Python 3.3
谢谢你。
该函数可以用纯数学编写,如下所示:
翻译成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
是这里描述的公式,它返回前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)
返回sum(i**2 for i in r)
数字的平方和, sum(r)**2
返回 r 中数字总和的平方。
# 正如测试版所说,
# (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
# :)
# 没有循环...只是一个公式!**
在这种情况下,事先进行数学计算是值得的。 您可以为平方和和和的平方推导出封闭形式的解。 然后代码是微不足道的(和 O(1))。
需要这两种解决方案的帮助?
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
在 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.