C++ 實現級數 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+....+(2n-1)) 的求和


在這個問題中,我們給定一個整數 n。我們的任務是建立一個程式來求級數 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+....+(2n-1)) 的和。

從這個級數中,我們可以觀察到級數的第 i 項是前 i 個奇數的和。

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

輸入

n = 3

輸出 

14

解釋 −(1) + (1+3) + (1+3+5) = 14

解決這個問題的一個簡單方法是使用巢狀迴圈,然後將所有奇數加到一個 sum 變數中。然後返回 sum。

示例

程式說明了解決方案的工作原理:

 線上演示

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   int sum = 0, element = 1;
   for (int i = 1; i <= n; i++) {
      element = 1;
      for (int j = 1; j <= i; j++) {
         sum += element;
         element += 2;
      }
   }
   return sum;
}
int main() {
   int n = 12;
   cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2"<<n<<"-1)) is "<<calcSeriesSum(n);
   return 0;
}

輸出


Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*12-1)) is 650


這種方法效率不高,因為它使用了兩個巢狀迴圈。

一種更高效的方法是從數學上找到求級數和的通用公式。

n 個奇數的和:

= (1) + (1+3) + (1+3+5) + … (1+3+5+... + 2n-1)

= n²

首先,讓我們看看前 n 個奇數的和,它代表級數的各個元素。

級數的和:

sum = (1) + (1+3) + (1+3+5) + … + (1+3+5+ … + 2n-1)
sum = ∑ (1+3+5+ … + 2n-1)
sum = ∑ n2
sum = [n * (n+1) * (2*n -1)]/6

示例

程式說明了解決方案的工作原理:

 線上演示

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

輸出

Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*9-1)) is 285

更新於:2020年8月14日

424 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.