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