打印给定第 n 项之和的程序
问题陈述包括打印级数的和,其中给出了第 N 项。
输入将给出 N 的值。我们需要找到序列直到 N 的和,其中序列的第 N 项由下式给出
$$\mathrm{N^{2}−(N−1)^{2}}$$
让我们通过以下示例了解问题
输入
N=5
输出
25
解释 - 给定的 N 值为 5。序列的前 5 项为
$\mathrm{N=1,1^{2}−(1−1)^{2}=1}$
$\mathrm{N=2,2^{2}−(2−1)^{2}=3}$
$\mathrm{N=3,3^{2}−(3−1)^{2}=5}$
$\mathrm{N=4,4^{2}−(4−1)^{2}=7}$
$\mathrm{N=5,5^{2}−(5−1)^{2}=9}$
直到第 5 项的序列项之和为 1+3+5+7+9=25。因此,输出为 25。
输入
N=8
输出
64
解释 - 使用序列第 N 项的公式计算直到第 8 项的序列和,
$\mathrm{N=1,1^{2}−(1−1)^{2}=1}$
$\mathrm{N=2,2^{2}−(2−1)^{2}=3}$
$\mathrm{N=3,3^{2}−(3−1)^{2}=5}$
$\mathrm{N=4,4^{2}−(4−1)^{2}=7}$
$\mathrm{N=5,5^{2}−(5−1)^{2}=9}$
$\mathrm{N=6,6^{2}−(6−1)^{2}=11}$
$\mathrm{N=7,7^{2}−(7−1)^{2}=13}$
$\mathrm{N=8,8^{2}−(8−1)^{2}=15}$
和将是 1+3+5+7+9+11+13+15=64,这是所需的输出。
让我们看看在 C++ 中解决问题的不同方法。
方法 1
该问题的朴素方法可以只是计算直到 N 的序列的每一项并将它们加起来以获得直到 N 的序列的和,其中序列的第 N 项为 $\mathrm{N^{2}−(N−1)^{2}}$
在 C++ 中实现该方法以获得直到 N 的序列和的步骤
我们将创建一个函数来计算直到其第 N 项的序列的和,其中序列的每一项由 $\mathrm{N^{2}−(N−1)^{2}}$ 给出
初始化一个变量来存储 N 项序列的和。该变量必须是 long long 数据类型,只是为了确保 N 值较大的和的值。
在 for 循环中从 i=0 迭代到 i<=N 以计算 N 项序列的和。
对于每次迭代,我们将使用公式 $\mathrm{N^{2}−(N−1)^{2}}$ 将第 i 项的和添加到变量中,因为它表示序列的第 N 项。
迭代到 N 后返回变量,这将是前 N 项序列的和,其中 N 将是用户输入。
示例
//C++ code to find the sum of the sequence of first N terms where //Nth term is given by N^2-(N-1)^2 #include <bits/stdc++.h> using namespace std; //function to calculate the sum of the sequence until N long long sum(int N){ long long a=0; //to store the sum of the sequence //iterating to calculate every term of the sequence from 1 to N for(int i=1;i<=N;i++){ //using the formula N^2-(N-1)^2 a = a + (i * i - (i-1)*(i-1)); //adding each term of the sequence until N } return a; } int main() { int N; N=8; //input //calling the function cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl; N=54; cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl; return 0; }
输出
The sum of the sequence up to 8 terms is: 64 The sum of the sequence up to 54 terms is: 2916
时间复杂度 - O(N),因为我们在 for 循环中迭代到 N 以计算序列的每一项并将其相加。
空间复杂度 - O(1),因为没有占用额外空间来查找和。
方法 2(高效方法)
除了使用序列第 N 项的公式同时计算序列的每一项并将其相加外,我们还可以使用算术级数 (A.P.) 的 N 项和的概念,因为序列正在形成一个 A.P。
如果我们使用序列第 N 项的公式,即 $\mathrm{N^{2}−(N−1)^{2}}$ 计算序列的前几项并观察模式,我们得到
序列的第一个数字是 1。
序列的第二个数字将是 3。
同样,$\mathrm{N=3,3^{2}−(3−1)^{2}=5}$
$\mathrm{N=4,4^{2}−(4−1)^{2}=7}$
$\mathrm{N=5,5^{2}−(5−1)^{2}=9}$
使用公式计算的序列的前几个数字是 1, 3, 5, 7, 9, 11, 13……
我们可以看到,该序列只是一个 A.P.,其第一项为 1,公差为 2。
A.P. 的前 N 项之和由下式给出:
$\mathrm{S_{N}=\frac{N}{2}(2*a+(N−1)d)}$,其中 a=AP 的第一项,d=AP 的公差。
要计算直到 N 项的序列和,我们将使用上述公式。替换值后,我们得到
$\mathrm{序列和=\frac{N}{2}(2*1+(N−1)2)\:as\:(a=1\:and\:d=2)}$
$$\mathrm{=\frac{2*N}{2}(1+N−1)=N^{2}}$$
直到第 N 项的序列和,其中第 N 项由 $\mathrm{N^{2}−(N−1)^{2}}$ 给出,等于 N 本身的平方,其中 N 是项数。
在 C++ 中实现该方法的步骤
我们将创建一个函数来获取直到第 N 项的序列的和,其第 N 项为 $\mathrm{N^{2}−(N−1)^{2}}$
初始化一个变量来存储序列的和,并将其中 N 的平方的值存储在其中,因为它给出了前 N 项序列的和。
返回将是所需输出的变量。
示例
//C++ code to find the sum of the sequence of first N terms where //Nth term is given by N^2-(N-1)^2 #include <bits/stdc++.h> using namespace std; //function to calculate the sum of the sequence until N terms long long sum(int N){ long long a=0; //to store the sum of the sequence a = N*N; //the formula to give the sum of sequence up to N terms return a; } int main() { int N; N=75; //input //calling the function cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl; N=1000; cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl; return 0; }
输出
The sum of the sequence up to 75 terms is: 5625 The sum of the sequence up to 1000 terms is: 1000000
时间复杂度 - O(1),花费恒定时间来计算序列的和。
空间复杂度 - O(1),因为没有占用额外空间。
结论
本文讨论了查找第 N 项为 $\mathrm{N^{2}−(N−1)^{2}}$ 的序列和的问题。我们讨论了用朴素的方法解决问题的方法,以及在恒定时间和空间内在 C++ 中找到直到 N 项的序列和的高效解决方案。
我希望您在阅读本文后能够理解问题和解决问题的方法。