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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP