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

C++로 √3 + √12 + ... 급수의 n항까지 합 구하기

문제 개요

이 문제에서는 정수 값 N이 주어지며, 우리의 목표는 √3 + √12 + ... 급수의 n항까지의 합을 구하는 것입니다.

해당 급수는 다음과 같습니다.

√3 + √12 + √27 + √48 + ...

즉, 제곱근으로 이루어진 급수입니다.

예제로 문제 이해하기

입력 : N = 3
출력 : 10.3922

설명 −

√3 + √12 + √27 = 1.7320 + 3.4641 + 5.1961 = 10.3922

해결 접근 방식

이 문제를 해결하는 가장 간단한 방법은 급수의 일반항을 먼저 찾은 뒤, n항까지의 합을 구하는 것입니다. 공식을 활용해 합을 한 번에 계산하면 시간 복잡도를 O(1)로 줄일 수 있습니다.

급수를 다시 살펴보면 다음과 같습니다.

√3 + √12 + √27 + √48 + ...

모든 항에 √3가 공통으로 포함되어 있으므로, 이를 인수로 묶으면 다음과 같이 정리됩니다.

⇒ √3 × (√1 + √4 + √9 + √16 + ...)

⇒ √3 × (1 + 2 + 3 + 4 + ...)

따라서 급수의 일반항은 다음과 같습니다.

Tn = n × √3

이 일반항을 이용하면 n항까지의 합을 다음과 같이 유도할 수 있습니다.

합 = Σ (n × √3)

합 = √3 × Σ n

합 = √3 × (n × (n+1)) / 2

즉, 반복문 없이 자연수 합 공식만으로도 전체 합을 상수 시간에 계산할 수 있습니다.

구현 예제

아래 프로그램은 위 솔루션의 동작 방식을 보여줍니다.

#include<iostream>
#include<math.h>
using namespace std;

float calcSumNTerms(float n) {
    return ((sqrt(3)) * ((n*(n+1))/2));
}

int main() {
    float n = 25;
    cout<<"급수의 n항까지의 합은 "<<calcSumNTerms(n);
    return 0;
}

출력 결과

급수의 n항까지의 합은 562.917

복잡도 분석

위 풀이는 반복 연산 없이 단일 공식으로 결과를 도출하므로, 시간 복잡도는 O(1), 공간 복잡도 역시 O(1)입니다. N이 아무리 커져도 성능 저하 없이 즉시 답을 얻을 수 있다는 점이 이 접근 방식의 가장 큰 장점입니다.