본문 바로가기
카테고리 없음

삼각수의 합. 닫힌 수식

by redcubes 2024. 7. 14.

(T(n) = 1 + 2 + ... + n)을 정의에 따르면, 이는 첫 (n)개의 자연수의 합으로, 다음과 같이 표현할 수 있다:

$$T(n) = \frac{n(n+1)}{2}$$

이를 사용하여 (W(n))을 계산하면

$$W(n) = \sum_{k=1}^{n} k \cdot T(k+1)$$

이제 (T(k+1))을 정의된 대로 대입해보겠습니다:

$$T(k+1) = \frac{(k+1)(k+2)}{2}$$

따라서:

$$W(5) = \sum_{k=1}^{5} k \cdot \frac{(k+1)(k+2)}{2}$$

이를 Python 코드로 계산하면

def W(n):
    return sum(k * (k + 1) * (k + 2) // 2 for k in range(1, n + 1))

# 사용 예시
n = 5
W(n)  # 결과 출력

이 코드를 실행하면 ( W(5) )의 값이 210임을 확인할 수 있다.

그런데 이 수식은 반복문을 사용하고 합계를 구하는 식으로 닫 힌 수식이 될 수 있을 것 같았다.

--- ---

주어진 합계:

$$ \sum_{k=1}^{n} \frac{k(k + 1)(k + 2)}{2} $$ 를 닫힌 수식으로 나타내기 위해 다음과 같은 과정을 거친다.

  1. 각 항을 전개하여 합을 나타낸다.

$$ k(k + 1)(k + 2) = k(k^2 + 3k + 2) = k^3 + 3k^2 + 2k $$

따라서 원래의 합은 다음과 같다:

$$ \sum_{k=1}^{n} \frac{k(k + 1)(k + 2)}{2} = \frac{1}{2} \sum_{k=1}^{n} (k^3 + 3k^2 + 2k) $$

  1. 각 항에 대해 닫힌 수식을 적용한다.
  • $$ \sum_{k=1}^{n} k^3 = \left( \frac{n(n + 1)}{2} \right)^2 $$
  • $$ \sum_{k=1}^{n} k^2 = \frac{n(n + 1)(2n + 1)}{6} $$
  • $$ \sum_{k=1}^{n} k = \frac{n(n + 1)}{2} $$

이를 결합하면:

$$ \frac{1}{2} \left( \left( \frac{n(n + 1)}{2} \right)^2 + 3 \cdot \frac{n(n + 1)(2n + 1)}{6} + 2 \cdot \frac{n(n + 1)}{2} \right) $$

  1. 이를 단일 분모를 가지도록 정리한다. 모든 항의 분모를 24로 맞추면:

$$ \frac{1}{2} \left( \frac{6n^2(n + 1)^2}{24} + \frac{12n(n + 1)(2n + 1)}{24} + \frac{24n(n + 1)}{24} \right) $$

  1. 각 항을 분자에 다시 쓰고 결합한다.

$$ \frac{1}{48} \left( 6n^2(n + 1)^2 + 12n(n + 1)(2n + 1) + 24n(n + 1) \right) $$

  1. 각 항을 전개하고 합치면:

$$ 6n^2(n + 1)^2 = 6n^2(n^2 + 2n + 1) = 6n^4 + 12n^3 + 6n^2 $$

$$ 12n(n + 1)(2n + 1) = 12n(2n^2 + 3n + 1) = 24n^3 + 36n^2 + 12n $$

$$ 24n(n + 1) = 24n^2 + 24n $$

이를 합치면:

$$ 6n^4 + 12n^3 + 6n^2 + 24n^3 + 36n^2 + 12n + 24n^2 + 24n = 6n^4 + 36n^3 + 66n^2 + 36n $$

  1. 분자를 인수분해하면:

$$ 6n^4 + 36n^3 + 66n^2 + 36n = 6(n^4 + 6n^3 + 11n^2 + 6n) = 6n(n + 1)(n + 2)(n + 3) $$

따라서, 최종적으로 합계는 다음과 같이 표현된다:

$$ \sum_{k=1}^{n} \frac{k(k + 1)(k + 2)}{2} = \frac{n(n + 1)(n + 2)(n + 3)}{8} $$

이로써 주어진 합계가 닫힌 수식으로 유도되었다.

 

_, *ns = map(int, open(0).read().split())
open(1,"w").write('\n'.join([str((n * (n + 1) * (n + 2) * (n + 3)) >> 3) for n in ns]))