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

계열의 합 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n) in C++

<시간/>

이 문제에서 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2 계열의 n번째 항을 정의하는 숫자 n이 주어집니다. +4+6+8+...+2n). 우리의 임무는 시리즈의 합을 찾는 프로그램을 만드는 것입니다.

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

입력

n = 3

출력

설명 - 합계 =(2) + (2+4) + (2+4+6) =2 + 6 + 12 =20

이 문제에 대한 간단한 해결책은 중첩 루프를 사용하는 것입니다. 내부 루프는 시리즈의 i번째 요소를 찾은 다음 모든 요소를 ​​합계 변수에 더합니다.

예시

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

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   int sum = 0;
   for (int i = 1; i<=n; i++) {
      int even = 2;
      for (int j = 1; j<=i; j++) {
         sum += even;
         even += 2;
      }
   }
   return sum;
}
int main() {
   int n = 5;
   cout<<"Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+"<<(2*n)<<") is "<<calcSeriesSum(n);
   return 0;
}

출력

Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+10) is 70

이것은 문제의 시간 복잡도가 O(n 2 차수이므로 문제를 해결하는 가장 효과적인 방법은 아닙니다. ).

문제에 대한 효과적인 해결책은 급수의 합에 대한 수학 공식을 사용하는 것입니다.

시리즈는 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n)

시리즈의 n번째 항은

n =(2 + 4 + 6 + 8 + … + 2n) =(n*n) + n

n n까지의 짝수의 합입니다.

시리즈의 합계는

sum = 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n)
sum = ∑ (n2 + n)
sum = ∑ n2 + ∑ n
sum = [ (n*(n+1)*(2n + 1))/6 ] + [ (n*(n+1))/2 ]
sum = ½ (n*(n+1)) [(2n + 1)/3 + 1]
sum = ½ (n*(n+1)) [(2n + 1 + 3)/3]
sum = ½ (n*(n+1)) [2(n+2)/3]
sum = ⅓ n*(n+1)(n+2)

예시

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

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   return ((n)*(n+1)*(n+2)/3);
}
int main() {
   int n = 5;
   cout<<"Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+"<<(2*n)<<") is "<<calcSeriesSum(n);
   return 0;
}

출력

Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+10) is 70