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