문제 개요
이번 글에서는 등차수열(Arithmetic Progression, A.P.)에서 처음 m개 항의 합과 처음 n개 항의 합의 비율이 주어졌을 때, m번째 항과 n번째 항의 비율을 구하는 문제를 다뤄보겠습니다.
입력: m = 8, n = 4
출력: 2.142
입력: m = 3, n = 2
출력: 1.666
입력: m = 7, n = 3
출력: 2.6
해결 접근 방법
m번째 항과 n번째 항의 비율을 코드로 계산하려면 먼저 수식을 간단하게 정리해야 합니다. 등차수열의 처음 m개 항의 합을 Sm, 처음 n개 항의 합을 Sn이라고 정의하겠습니다.
- a : 첫째 항
- d : 공차(공통 차이)
문제에서 주어진 조건은 다음과 같습니다.
Sm / Sn = m² / n²
등차수열의 합 공식은 다음과 같습니다.
Sm = (m/2)[2a + (m−1)d]
이를 주어진 조건에 대입하면,
m² / n² = (m/2)[2a + (m−1)d] / (n/2)[2a + (n−1)d]
양변을 정리하면,
m / n = [2a + (m−1)d] / [2a + (n−1)d]
교차 곱셈(cross multiplication)을 적용하면,
n[2a + (m−1)d] = m[2a + (n−1)d]
전개하여 정리하면,
2an + mnd − nd = 2am + mnd − md
2an − 2am = nd − md
(n − m)·2a = (n − m)·d
양변을 (n − m)으로 나누면 다음 결론을 얻습니다.
d = 2a
m번째 항과 n번째 항의 비율 유도
등차수열의 m번째 항 공식은 다음과 같습니다.
Tm = a + (m−1)d
따라서 m번째 항과 n번째 항의 비율은,
Tm / Tn = [a + (m−1)d] / [a + (n−1)d]
여기서 앞서 구한 d = 2a를 대입하면,
Tm / Tn = [a + (m−1)·2a] / [a + (n−1)·2a]
= a(1 + 2m − 2) / a(1 + 2n − 2)
최종적으로 아주 간단한 공식이 완성됩니다.
Tm / Tn = (2m − 1) / (2n − 1)
이제 복잡한 계산 없이 m과 n 값만으로 두 항의 비율을 바로 구할 수 있습니다. 이 공식을 활용한 C++ 코드를 살펴보겠습니다.
C++ 구현 예제
#include <bits/stdc++.h>
using namespace std;
int main(){
float m = 8, n = 4;
// 공식을 적용하여 비율 계산
float result = (2 * m - 1) / (2 * n - 1);
cout << "m번째 항과 n번째 항의 비율: " << result;
return 0;
}
실행 결과
m번째 항과 n번째 항의 비율: 2.14286
m = 8, n = 4를 대입하면 (2×8 − 1) / (2×4 − 1) = 15 / 7 ≈ 2.14286으로, 예상 출력과 일치하는 것을 확인할 수 있습니다.
마무리
이 튜토리얼에서는 등차수열의 합의 비율이 주어졌을 때 m번째 항과 n번째 항의 비율을 구하는 문제를 다뤘습니다. m항의 합 공식과 m번째 항 공식을 수학적으로 전개하고 간소화함으로써, (2m − 1) / (2n − 1)이라는 간단한 공식을 도출했습니다. 이 접근법은 C++뿐만 아니라 C, Java, Python 등 어떤 프로그래밍 언어로도 손쉽게 구현할 수 있습니다. 이 글이 여러분의 학습에 도움이 되기를 바랍니다.