1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는?

사이트 이름 - 문제 6번

1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).

12 + 22 + ... + 102 = 385

 

1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).

(1 + 2 + ... + 10)2 = 552 = 3025

 

따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.

그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?

해결방법

간만에 정말 쉬운게 나왔다.

이건 파이썬에서 ** 가 제곱이라는 것만 알면 간단히 해결되는 문제다.

  • sum : 리스트안에 있는 요소들의 합을 반환
  • abs : 절대값
def squared_sum(number):
    '''제곱의 합'''
    return sum([i ** 2 for i in range(1, number + 1)])


def sum_squared(number):
    '''합의 제곱'''
    return sum([i for i in range(1, number + 1)]) ** 2


def calc(number):
    '''[합의 제곱]과 [제곱의 합]의 차'''
    return abs(sum_squared(number) - squared_sum(number))

# 실행
print(calc(10)) # 2640
print(calc(100)) # 25164150

위 식을 줄이면

def solution(number):
    return abs(sum([i ** 2 for i in range(1, number + 1)]) - sum([i for i in range(1, number + 1)])** 2)
    
print(solution(100))

# 한 줄 짜리
print(abs(sum([i ** 2 for i in range(1, 101)]) - sum([i for i in range(1, 101)]) ** 2))

다른이의 해결 방법

a, b =0 , 0
for i in range(1,101):
    a += i**2
    b += i
print(b**2-a)

+ Recent posts