繁体   English   中英

计算平方和与平方和之差的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM