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

时间:2013-03-23 23:50:12

标签: python sum

我正在尝试编写一个名为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

谢谢。

5 个答案:

答案 0 :(得分:9)

这个函数可以用纯数学写成:

The formula

翻译成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