簡體   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