2013-03-23 119 views
4

我想寫一個函數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

謝謝。

回答

8

的功能可以通過使用純數學這樣寫:

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使用三角形數公式,它是第一個自然數的總和,然後將其平方。


這也可以用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中數字的總和的平方。

+0

不明白爲什麼這是-1'd。我爲 – TerryA 2013-03-24 09:01:56

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 
+0

非常感謝你 – Kuma 2013-03-24 00:06:51

3

這是一個事先付費做數學的例子。您可以推導封閉形式的解決方案的平方和和平方和。然後代碼是微不足道的(和O(1))。

需要兩種解決方案的幫助?

+1

+1了,現在我永遠不會忘記在解決問題之前做一些數學。 – 2015-05-24 03:48:27

4

#貝塔說, #(總和(I))^ 2 - (總和(I^2))是很容易計算:) #A =總和(I)= I *( (i + 1)/ 2 #B = sum(i^2)= i *(i + 1)*(2 * i + 1)/ 6 # (3(I^2) - 我 - 2)!/ 12 #:) #沒有循環...只是一個公式**

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