Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

급수의 합을 구하는 프로그램 1*2*3 + 2*3*4+ 3*4*5 + . . . + n*(n+1)*(n+2) C++

<시간/>

이 문제에서 급수의 n번째 항을 정의하는 숫자 n이 주어집니다. 우리의 임무는 시리즈 1*2*3 + 2*3*4+3*4*5 + 의 합을 찾는 프로그램을 만드는 것입니다. . . + n*(n+1)*(n+2) in C++ .

문제 설명 − 여기에서 주어진 급수의 n항까지의 합은 1*2*3 + 2*3*4+ 3*4*5 + 입니다. . . + n*(n+1)*(n+2). 이것은 n*(n+1)*(n+2)의 합으로 디코딩될 수 있습니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

n = 5

출력

420

설명

1*2*3 + 2*3*4 + 3*4*5 + 4*5*6 + 5*6*7 = 6 + 24 + 60 + 120 + 210 = 420

솔루션 접근 방식

문제를 해결하는 간단한 방법은 1에서 n까지의 루프를 사용하고 각 반복에서 곱을 찾아 sumVar에 추가하는 것입니다. 루프가 종료되면 sumVar를 반환합니다.

알고리즘

  • 1단계 - 루프 i =1 ~ n.
    • 1.1단계 - sumVar, sumVar 업데이트 +=i*(i+1)*(i+2)
  • 2단계 - sumVar를 인쇄합니다.

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   for(int i = 1; i <= n; i++)
      sumVar = sumVar + ( (i)*(i+1)*(i+2) );
   return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

출력

The sum of series till 7 is 1260

이 접근 방식은 N 차수의 시간 복잡도가 필요하므로 효율적이지 않습니다.

또 다른 접근 방식 급수의 합에 대한 수학 공식을 사용하고 있습니다. 문제 설명에서 논의했듯이 급수는 (n)*(n+1)*(n+2)의 합이라고 할 수 있습니다.

이 정보를 사용하여 합계에 대한 일반 공식을 만들어 보겠습니다.

$Sum =\sum_{\square=1}^\square\blacksquare((\square)\ast(\square+1)\ast(\square+2))$

$=\sum\lbrace{(n^2+n)(n+2)}\rbrace$

$=\sum\lbrace{n^3 + n^2 + 2n^2 + 2n}\rbrace$

$=\sum\lbrace{n^3 +3n^2 + 2n}\rbrace$

$=\sum_{\square=1}^\square\blacksquare\square^3+3\sum_{\square=1}^\square\blacksquare\square^2+2\sum_{\square=1}^\ square\blacksquare\square^\blacksquare$

이제 합계에 대한 일반 공식을 사용하여

$\sum_{\square=1}^\square\blacksquare\square^3=\frac{(\square\ast(\square+1))^2}{2}$

$\sum_{\square=1}^\square\blacksquare\square^2=\frac{(\square\ast(\square+1)\ast(2\square+1))^\blacksquare}{6} $

$\sum_{\square=1}^\square\blacksquare\square^\blacksquare=\frac{(\square\ast(\square+1)^\blacksquare}{2}$

이 모든 것을 합산 공식에 더하면

$Sum=\frac{(\square\ast(\square+1))^2}{2^2}+\frac{3(\square\ast(\square+1)\ast(2\square+1) ))^\blacksquare}{6}+\frac{2(\square\ast(\square+1))^\blacksquare}{2}$

$=\frac{(\square\ast(\square+1))^\blacksquare}{2}[( (n * (n+1))/2 ) + (3(2n+1)/3) + 2]$

$=\frac{(\square\ast(\square+1))^\blacksquare}{4}[n^2+ n + 4n + 2 + 4]$

$=\frac{(\square\ast(\square+1))^\blacksquare}{4}[n^2+ 5n + 6]$

$=\frac{(\square\ast(\square+1))^\blacksquare}{4}[(n+2)(n+3)]$

=¼[ (n)*(n+1)*(n+2)*(n+3) ]

n번째 항까지의 급수는 다음 공식을 사용하여 계산됩니다.

¼[ (n)*(n+1)*(n+2)*(n+3) ]

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   sumVar = ( (n)*(n + 1)*(n + 2)*(n + 3)/4 );
   return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

출력

The sum of series till 7 is 1260