PQC Verified

스레드에서 주운 문제를 한 번 풀어 보자

by gg582 · 2026-09-22 06:32:28 · 89 views · 5 min read

Table of contents

쓰레드에서주웟서.jpg x \ge 1

f(x) = \int_{1}^{x} \frac{t^{2025} + t^{2024} + 1}{t^{2025} + t^{1885} + 1} \, dt

분모와 분수를 최고차항 t^{2025}로 나누어 정리하면:

f(x) = \int_{1}^{x} \frac{1 + t^{-1} + t^{-2025}}{1 + t^{-140} + t^{-2025}} \, dt

"무한은 곱하거나 나누어도 무한이다." 라는 문장이 최근 읽은 우리나라 수학책에 나왔습니다. 18세기 서양 뿐만 아니라 청을 통해 18-19세기 조선에도 무한의 개념은 일부 알려졌습니다. 산학 총서들에도 짧게나마 맥락이 나오고요. 따라서 최고차항으로 나누어 정리하는 것 역시 자연스러운 수리적 맥락입니다. 하지만 조선 시대에는 극한이나 무한 개념이 지적 유희로 여겨져 각광받지 못한 것도 사실이라서, 여러모로 독서할 때 아쉽습니다.


미적분학의 기본 정리에 의해 피적분함수가 곧 도함수이므로:

f'(x) = \frac{x^{2025} + x^{2024} + 1}{x^{2025} + x^{1885} + 1} = 1 + \frac{x^{2024} - x^{1885}}{x^{2025} + x^{1885} + 1}

무한히 커질 때 가장 발산 속도가 빠른 항을 따라가므로:

\lim_{x \to \infty} f'(x) = 1

구하고자 하는 식:

\lim_{n \to \infty} \sum_{k=2}^{10} \frac{f(n+2k) - f(n)}{(k-1)k(k+1)}

이때 분자 항을 정리하면:

f(n+2k) - f(n) = \int_{n}^{n+2k} f'(x) \, dx = \int_{n}^{n+2k} \left( 1 + \frac{x^{2024} - x^{1885}}{x^{2025} + x^{1885} + 1} \right) dx

n \to \infty일 때 피적분함수의 나머지 항은 \mathcal{O}(x^{-1}) 수준으로 감쇄하고 적분 구간의 길이는 2k로 고정되어 있으므로:

\lim_{n \to \infty} [f(n+2k) - f(n)] = \int_{n}^{n+2k} 1 \, dx = 1 \times (n+2k - n) = 2k

이를 원래 식에 대입하면 n의 영향이 사라지므로:

\sum_{k=2}^{10} \frac{2k}{(k-1)k(k+1)}

분모는 두 방정식의 곱입니다. 약분 가능하게 만들기 위해 두 식을 더하고 뺴는 관계로 2를 다시 표현해 줍시다.

기본적인 발상은 '이미 있는 것 두 개를 조합해서, 표기를 맞추기'로 생각해 주시면 마음이 편합니다. 암기하지 말고, 짝을 맞추고 다듬는 공업적 감각으로 봅시다.

= \sum_{k=2}^{10} \frac{2}{(k-1)(k+1)} = \sum_{k=2}^{10} \frac{(k+1) - (k-1)}{(k-1)(k+1)}

= \sum_{k=2}^{10} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)

우리가 사랑하는 '항이 소거되는 수열'입니다.

= \left( 1 - \frac{1}{3} \right) + \left( \frac{1}{2} - \frac{1}{4} \right) + \left( \frac{1}{3} - \frac{1}{5} \right) + \left( \frac{1}{4} - \frac{1}{6} \right) + \left( \frac{1}{5} - \frac{1}{7} \right) + \left( \frac{1}{6} - \frac{1}{8} \right) + \left( \frac{1}{7} - \frac{1}{9} \right) + \left( \frac{1}{8} - \frac{1}{10} \right) + \left( \frac{1}{9} - \frac{1}{11} \right)

= \left( 1 + \frac{1}{2} \right) - \left( \frac{1}{10} + \frac{1}{11} \right) = \frac{3}{2} - \frac{21}{110}

= \frac{165 - 21}{110} = \frac{144}{110} = \frac{72}{55}

부족한 것과 꽉 찬 것이 대응하며 사라집니다.


러스트 코드로 짜 보자

fn res(n: u64) -> f64 {
    assert!(n >= 2, "n >= 2 assertion failed.");
    let n = n as f64;
    1.5 - (2.0 * n + 1.0) / (n * n + n)
}

fn main() {
    println!("{}", res(10));
}

1.3\dot{0}\dot{9} = 72/55


한 가지 확장 문제

그럼 마지막에 나온 2에서 10까지의 시그마를 극한으로 보내봅시다.

\sum_{k=2}^{10} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)

를,

\lim_{n \to \infty} \sum_{k=2}^{n} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)

으로 하면 어디로 수렴할까요?

러스트로 짜서 수치를 봅시다.

use std::io;

fn res(n: u64) -> f64 {
    assert!(n >= 2, "n >= 2 assertion failed.");
    let n = n as f64;
    1.5 - (2.0 * n + 1.0) / (n * n + n)
}

fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();

    let tokens: Vec<&str> = input.split_whitespace().collect();

    if tokens.len() == 1 {
        let n: u64 = tokens[0].parse().unwrap();
        println!("{}", res(n));
    }

}

data = [
    (2, "0.6666666666666666"),
    (20, "1.4023809523809523"),
    (200, "1.4900248756218906"),
    (2000, "1.4990002498750625"),
    (20000, "1.499900002499875"),
    (200000, "1.499990000025"),
    (200000000000000, "1.49999999999999")
]

for inp, out in data:
    print(f"| {inp} | {out} |")

| 2 | 0.6666666666666666 |
| 20 | 1.4023809523809523 |
| 200 | 1.4900248756218906 |
| 2000 | 1.4990002498750625 |
| 20000 | 1.499900002499875 |
| 200000 | 1.499990000025 |
| 200000000000000 | 1.49999999999999 |

입력 결과
2 0.6666666666666666
20 1.4023809523809523
200 1.4900248756218906
2000 1.4990002498750625
20000 1.499900002499875
200000 1.499990000025
200000000000000 1.49999999999999

n = \infty

일 때는 1.5로 수렴하는 것으로 보입니다. 실제로 풀어 봅시다.


\sum_{k=2}^{n} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)

= \left( 1 - \frac{1}{3} \right) + \left( \frac{1}{2} - \frac{1}{4} \right) + \left( \frac{1}{3} - \frac{1}{5} \right) + \dots + \left( \frac{1}{n-2} - \frac{1}{n} \right) + \left( \frac{1}{n-1} - \frac{1}{n+1} \right)

= 1 + \frac{1}{2} - \frac{1}{n} - \frac{1}{n+1}

= \frac{3}{2} - \left( \frac{1}{n} + \frac{1}{n+1} \right)

= \frac{3}{2} - \frac{(n+1) + n}{n(n+1)}

= \frac{3}{2} - \frac{2n+1}{n^2+n}

\lim_{n \to \infty} \sum_{k=2}^{n} \left( \frac{1}{k-1} - \frac{1}{k+1} \right) = \lim_{n \to \infty} \left( \frac{3}{2} - \frac{2n+1}{n^2+n} \right) = \frac{3}{2} - 0 = \frac{3}{2} = 1.5


P.S

yjlee@elegant:~/learn-math/쓰레드에서주운문제들/problem-1$ cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/problem-1`
100000000000000000
1.5
yjlee@elegant:~/learn-math/쓰레드에서주운문제들/problem-1$ 

64비트 실수형의 소수점 정밀도를 넘어가면 1.5로 수렴하는 걸 보일 수는 있습니다.

하지만 정말 수렴하는 게 맞는지 보이려면 엄밀히는 수식을 풀어야죠. 물론 프로그래밍에선 수식을 일일이 계산하지 않더라도, n의 범위를 보고 충분히 큰 n에 1.5 상수를 박아도 좋겠네요.


복잡하고 잘 알려져 생략한 것들 몇 가지

  1. 미적분학의 기본 정리 (Fundamental Theorem of Calculus)
  • 제임스 그레고리(James Gregory)가 1668년 《Geometriae Pars Universalis》에서 기본정리에 해당하는 명제를 출판하고 증명
  1. 망원급수 (Telescoping Series)
  • 피에트로 멩골리(Pietro Mengoli)가 1650년 《Novæ Quadraturæ Arithmetica》에서 망원식으로 소거되는 급수의 합을 명시적으로 계산
  1. 부분분수 분해 (Partial Fraction Decomposition)
  • 고트프리트 빌헬름 라이프니츠(Gottfried Wilhelm Leibniz)와 요한 베르누이(Johann Bernoulli)가 1702년 독립적으로 부분분수 분해법을 발견
  1. 유한차분법 (Calculus of Finite Differences)
  • 브룩 테일러(Brook Taylor)가 1715년 《Methodus Incrementorum Directa et Inversa》에서 유한차분을 체계적인 계산법으로 발전시킴
  1. 적분의 평균값 정리 (Mean Value Theorem for Integrals)
  • 오귀스탱루이 코시(Augustin-Louis Cauchy)가 1823년 적분의 평균값 정리를 해석학적 일반형으로 정식화하고 증명
  1. 조임정리 (Squeeze Theorem)
  • 베르나르 볼차노(Bernard Bolzano)가 1817년 수렴하는 양을 상하에서 끼워 극한을 결정하는 엄밀한 논법을 전개하고, 오귀스탱루이 코시(Augustin-Louis Cauchy)가 이를 1821년 해석학에 체계적으로 사용
  1. 균등수렴 (Uniform Convergence)
  • 오귀스탱루이 코시(Augustin-Louis Cauchy)가 1821년 균등수렴에 해당하는 조건을 사용하고, 크리스토프 구데르만(Christoph Gudermann)이 1838년 이를 명시적으로 다루었으며, 카를 바이어슈트라스(Karl Weierstrass)가 19세기 중반 현대적인 개념으로 체계화
  1. 르베그 지배 수렴 정리 (Lebesgue's Dominated Convergence Theorem)
  • 앙리 르베그(Henri Lebesgue)가 1908년 현대적인 형태의 지배 수렴 정리를 제시
  1. 고차 차분 및 보간법 (Higher-Order Differences and Interpolation)
  • 유탁(劉焯)이 약 600년경 2차 보간법을 사용하고, 브라마굽타(Brahmagupta)가 625년경 독립적으로 2차 보간법을 제시했으며, 일행(一行)이 727년 부등간격 2차 보간법으로 발전시키고, 곽수경(郭守敬)이 1280년 3차 보간법을 사용했으며, 주세걸(朱世傑)이 1303년 고차 차분 계산법을 정립함.
  1. IEEE 754 부동소수점 연산 표준 (IEEE Standard for Floating-Point Arithmetic)
  • 윌리엄 카한(William Kahan)이 주도한 IEEE 작업반이 1985년 IEEE 754-1985 최초판을 제정하여 이진 부동소수점 산술을 표준화

맞는지 찾아보기 귀찮아서 LLM 에이전트한테 몇 번 정정 요청해서 모아 왔습니다. 틀렸을 수도 있어요.

Related posts

Back
Report

Comments

No comments yet.