2013-03-23 6 views
4

sum_square_difference이라는 함수를 작성하려고합니다. 숫자 n을 사용하고 첫 번째 n 개의 자연수의 제곱과 제곱의 제곱의 합 사이의 차이를 반환합니다. 그들의 합계.제곱의 합과 제곱의 차 사이의 차이를 계산하는 함수

def square_sum(numbers): 
    total = 0 
    for each in range: 
     total = total + each 
    return total**2 

나는 방법을 모른다 :

나는 내가 합계 함수의 제곱을 구현하기 위해 노력했다

def sum_of_squares(numbers): 
    total = 0 
    for num in numbers: 
     total += (num ** 2) 
    return(total) 

제곱의 합을 정의하는 함수를 작성하는 방법을 알고 있다고 생각 차이를 알려주는 함수를 결합하고 함수가 올바른지 모르겠습니다.

제안 사항을 알려주십시오. 파이썬 3.3을 사용 중입니다.

고맙습니다.

답변

8

함수는 다음과 같이 순수한 수학으로 기록 될 수있다 :

def square_sum_difference(n): 
    return int((3*n**2 + 2*n) * (1 - n**2)/12) 

수식 두 식의 단순화 :

The formula

파이썬로 번역 :

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 자연수의 제곱의 합을 반환하는 here이라고하는 수식입니다.

(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이 연구에서 숫자의 합계의 제곱을 반환합니다.

+0

왜 이것이 -1'd인지 알 수 없습니다. 내가 +1 – TerryA

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

3

이것은 미리 계산을 수행하는 경우입니다. 합계의 제곱과 제곱의 합계에 대해 폐쇄 형 솔루션을 파생시킬 수 있습니다. 그런 다음 코드는 사소한 것입니다 (그리고 O (1)).

두 가지 솔루션에 대한 도움이 필요합니까?(SUM ((I^2)) 계산 : #의 A = SUM (Ⅰ) = I *을 매우 간단 - 베타로

+1

을 만들었으니 문제를 해결하기 전에 수학을하는 것을 잊지 않을 것입니다. –

4

# 1 # (SUM (I))^2 말한다 i + 1)/2 # B = 합계 (i^2) = i * (i + 1) * (2 * i + 1)/6 # (3 (I^2) - 난 - 2)!/(12) # : # 어떤 루프 ... 단지 공식 **

2

이 방법으로이를 달성 할 수있는 루비 언어에서

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 
관련 문제