C++ 中求級數 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n) 的和


在這個問題中,我們給定一個數字 n,它定義了級數 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n) 的第 n 項。我們的任務是建立一個程式來找到該級數的和。

讓我們舉個例子來理解這個問題,

輸入

n = 3

輸出

解釋 - 和 = (2) + (2+4) + (2+4+6) = 2 + 6 + 12 = 20

解決這個問題的一個簡單方法是使用巢狀迴圈。內迴圈找到級數的第 i 項,然後將所有元素加到 sum 變數中。

示例

程式說明我們解決方案的工作原理,

即時演示

#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(n2) 級別。

解決這個問題的有效方法是使用該級數和的數學公式。

該級數為 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n)

該級數的第 n 項為

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

an 是從 1 到 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

更新於: 2020-08-14

218 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.