Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

급수의 합 구하기: 2/3 - 4/5 + 6/7 - 8/9 + … (n항까지)

급수란 무엇인가?

급수(series)란 일정한 규칙을 따르는 수들의 나열을 의미하며, 수학에는 각기 고유한 논리나 공식으로 정의된 다양한 급수가 존재합니다. 이 문제에서는 아래와 같은 급수가 주어집니다.

2/3, -4/5, 6/7, -8/9, …

일반항

n번째 항(n은 1부터 시작)은 다음과 같이 정의할 수 있습니다.

(-1)^(n+1) × (2n) / (2n + 1)

즉, 분자와 분모가 각각 2씩 커지며, 부호는 양수와 음수가 번갈아 나타나는 패턴을 가집니다.

접근 방법

급수의 합을 구하려면 마지막 n항까지 각 항을 부호에 맞게 차례대로 더하고 빼면 됩니다.

예시 1

입력: 10
출력: -0.191921

풀이 과정

(2/3) - (4/5) + (6/7) - (8/9) + (10/11) - (12/13) + (14/15) - (16/17) + (18/19) - (20/21) = -0.191921

예시 2

입력: 17
출력: 0.77152

풀이 과정

(2/3) - (4/5) + (6/7) - (8/9) + (10/11) - (12/13) + (14/15) - (16/17) + (18/19) - (20/21) + (22/23) - (24/25) + (26/27) - (28/29) + (30/31) - (32/33) + (34/35) = 0.77152

C++ 구현 예제

#include <iostream>
using namespace std;
int main() {
    int n = 17, i = 1;
    double res = 0.0;
    bool sign = true;
    while (n > 0) {
        n--;
        if (sign) {
            sign = !sign;
            res = res + (double)++i / ++i;
        } else {
            sign = !sign;
            res = res - (double)++i / ++i;
        }
    }
    cout << "주어진 급수의 합은 " << res;
    return 0;
}

실행 결과

주어진 급수의 합은 0.77152

코드 설명

  • n: 계산할 항의 개수를 나타냅니다.
  • i: 반복이 진행될 때마다 두 번씩 증가하며 분자와 분모 값을 순차적으로 생성합니다.
  • sign: 불리언 변수로, 각 항의 부호(+/-)를 번갈아 결정하는 역할을 합니다.
  • while 루프가 n번 실행되면서 각 항을 결과 변수 res에 누적하여 최종 합을 구합니다.

이 알고리즘은 하나의 반복문으로 모든 항을 처리하므로 시간 복잡도는 O(n)이며, 별도의 추가 메모리가 필요하지 않아 공간 복잡도는 O(1)로 매우 효율적입니다.