

수열의 합
우리는 고등학교에서 다양한 수열의 합을 구하게됩니다. 이때
그런데 여러분들은 이 식들이 생각보다 매우 규칙적이라는 것을 알고 계셨나요? 오늘은 그 비밀을 함께 풀어보도록 하겠습니다.
1부터 까지의 정수의 합
우선 가장 쉬운
이 식의 답을 구하는 과정은 어렵지 않습니다. 먼저
이때
이 식을 이용하면 유용한 값들을 쉽게 찾을 수 있습니다. 예를들어
1부터 까지의 정수의 합
우리가 필요한 것은
이제
먼저 좌변을 보겠습니다. 좌변의 일반항에
다음으로 우변을 보겠습니다. 우변은
마지막으로 정리된 결과를 원래식에 대입하여
그리고 같은 방법으로 어렵지 않게
여기까지는 고등학교 수업시간에 배우는 내용입니다. 그리고 학교에서 아마 이해를 돕기 위해 다양한 그림을 곁들이죠.
이 때의 결과는 내신이나 수능에 매번 출제되기도하고 나중에 정적분과 급수와의 관계에서 다시 등장하기에 보통은 외우고 있습니다.
일반화된 패턴
이 공식을 보면 일정한 규칙이 보이시나요? 차수가 하나 증가한다는 것 이외에는 규칙이 있다고 상상하기는 어렵습니다. 시험에서도 세제곱이상의 식을 물어보는 문제는 잘 출제되지 않으므로 굳이 고민하고 싶지도 않습니다. 그럼에도 불구하고 규칙을 찾을 수 있을까요? 이 식을 자세히 관찰하면 공통적으로 갖고 있는 몇가지 특성을 더 찾아볼 수 있습니다.[^1]
좌변을 보면 모두
마지막으로 양변에
그렇다면
베르누이 수(Bernoulli numbers)
테일러 정리를 이용해
얼핏 보면 이 숫자들이 너무 불규칙적이라 별로 중요하지 않다고 생각하실 수도 있습니다. 그런데 사실 이 숫자들은 우리가 생각보다 자주 등장합니다.[^3]
앞서 보았던 베르누이 함수의 짝수 부분만 고려한 함수로 나타낼 수 있습니다.
복소수에서의 오일러 공식을 이용하면
앞선 식을 이용해
마지막으로
그런데 여기서 끝이 아닙니다. 베르누이 수를 이용해 다음과 같은 베르누이 다항식을 정의해보겠습니다.
몇 가지 베르누이 다항식을 예로 보면,
베르누이 수
주기가 1인
주기적 베르누이 함수
앞서 본 결과와 잘 맞아 떨어지죠. 이 식으로 알 수 있는 정보가 더 있을까요? 마지막으로 이 식의 양변에
바로 리만 제타 함수죠.
따라서 리만 제타 함수에 짝수를 대입한 값은 베르누이 수를 이용해 찾을 수 있습니다. 이렇게 보면 리만 제타함수가 짝수를 정의역으로 가질 때, 함숫값에
파울 하버의 공식
이야기가 멀리 가버렸지만, 다시 원래 문제인 거듭제곱의 합으로 돌아와보겠습니다. 앞서 유도했던 이 식은 파울하버 공식(Faulhaber’s formula)이라 불립니다. 이제는
이 식을 이용해 거듭제곱의 합을 구하기에 앞서, 건너 뛰었던 증명을 조금 자세히 들여다 보겠습니다.
이때,
식은 다음과 같이 다시 쓸 수 있습니다.
베르누이 수
짝수 일 때는
파울하버의 공식을 이용하면
이 식을 직접 합산 한다면, 모든
import time
from mpmath import bernoulli, binomial, mp
# mpmath로 정밀도를 높여 연산하기
mp.dps = 100 # 소수점 이하 100자리까지 계산
# 직접 합산 방식
def direct_sum(n, m):
return sum(k**m for k in range(1, n + 1))
# 파울하버 공식 방식 (mpmath 사용, 결과를 정수형으로 변환)
def faulhaber_sum(n, m):
result = mp.mpf(0)
for i in range(m + 1):
result += (-1) ** i * binomial(m + 1, i) * bernoulli(i) * n ** (m + 1 - i)
# 최종 결과를 정수형으로 변환
return int(result / (m + 1))
# 예시
n = 10**6
m = 10
# 직접 합산 방식 시간 측정
start_time = time.time()
direct_result = direct_sum(n, m)
direct_time = time.time() - start_time
# 파울하버 공식 방식 시간 측정
start_time = time.time()
faulhaber_result = faulhaber_sum(n, m)
faulhaber_time = time.time() - start_time
# 결과 출력
print(f"직접합산 공식 결과: {direct_result}, 시간: {direct_time:.6f}초")
print(f"파울하버 공식 결과: {faulhaber_result}, 시간: {faulhaber_time:.6f}초")
파울하버 공식은 단순히 수학적 계산의 효율성을 높여줄 뿐만 아니라, 복잡한 문제를 단순화하여 접근하는 데 큰 도움을 줄 수도 있습니다.[^5]
[!note] 오일러-매클로린 공식 (Euler–Maclaurin formula)
오일러-마클로린 공식은 적분과 급수의 근사 관계를 통해 복잡한 급수를 간단하게 계산하는 데 사용됩니다.
복잡해 보이는 수식 뒤에 숨겨진 패턴과 논리를 발견하는 과정은 단순한 계산을 넘어 수학의 본질을 이해하고 응용하는 것과 연결됩니다. 앞서 본 제타함수의 공식은 양자장론에서 무한대가 발생하는 진동수의 합을 처리할 때 제타 함수 규칙화(zeta function regularization)기법에 응용될 수 있습니다.
우리가 배운 단순한 급수의 합이 리만 제타 함수나 양자 물리학에서 중요한 역할을 한다는 것은 수학이 한정된 지식이 아니라 끊임없이 연결되는 학문이라는 점을 보여줍니다. 수학을 배우는 것이 단순히 계산을 하고 문제를 푸는 것이 아니라, 새로운 영역을 탐구하는 첫걸음이라는 사실을 기억해보면 어떨까요?
[^1]: proof of Faulhaber’s formula (planetmath.org)
[^2]: Bernoulli Number
[^3]: Bernoulli numbers, taylor series expansion of tan x
[^4]: Bernoulli Polynomials, Fourier Series and Zeta Numbers Scheufens, Ernst E
[^5]: Maclaurin's Second Formula and its Generalization
You know what's cooler than magic? Math.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!