C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で最初のn個の自然数のm番目の合計を求めます


この問題では、2つの整数mとnが与えられます。私たちの仕事は、最初のn個の自然数のm番目の合計を見つけることです。

問題の説明: n個の自然数の合計をm回求めます。合計は次の式で与えられます

if(m> 1)、

sum(n、m)=sum(sum(n、(m-1))、1)

if(m =1)

sum(n、m)=sum(n、1)=n個の自然数の合計

問題を理解するために例を見てみましょう。

入力: m =4、n =2

出力: 231

説明:

sum(2、4)=sum(sum(2、3)、1)

=合計(合計(合計(2、2)、1)、1)

=合計(合計(合計(合計(2、1)、1)、1)、1)

=合計(合計(合計(3、1)、1)、1)

=合計(合計(6、1)、1)
=合計(21、1)

=231

ソリューションアプローチ-

この問題の簡単な解決策は、2つのネストされたループを使用することです。外側の値はm値用で、内側の値はn値用です。 nの値を更新し、n個の自然数の合計をm回計算します。

より効果的なアプローチは、n個の自然数の合計をm回再帰的に呼び出し、再帰が行われるたびに前の合計で値を更新することです。

アルゴリズム:

ステップ1: 合計値をsum= sum(n、m-1)*(sum(n、m-1)+1)/ 2で更新します。 mの合計値が1より大きい場合。

ステップ2: m =1の場合、合計=n *(n + 1)/2を返します。

ステップ3: 合計を返します。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;

int calcSumN(int n, int m) {
   
   if (m == 1)
      return (n * (n + 1) / 2);
   return (calcSumN(n, m-1) * (calcSumN(n, m-1) + 1) / 2);
}

int main() {
   
   int n = 4;
   int m = 6;
   cout<<m<<"-th summation of first "<<n<<" natural numbers is "<<calcSumN(n, m);
   return 0;
}

出力

6-th summation of first 4 natural numbers is 125230148

  1. 最初のn個の自然数の二乗和のためのC++プログラム?

    この問題では、最初のn個の自然数の2乗の合計を取得する方法を確認します。ここでは、1からnまで実行されるforループを使用しています。各ステップで、項の2乗を計算し、それを合計に追加します。このプログラムは、完了するまでにO(n)時間かかります。しかし、これをO(1)または一定時間で解きたい場合は、この級数式-を使用できます。 アルゴリズム squareNNatural(n) begin    sum := 0    for i in range 1 to n, do       sum := sum + i^2 &

  2. 自然数の合計を計算するC++プログラム

    自然数は1から始まる正の整数です。 自然数のシーケンスは-です 1, 2, 3, 4, 5, 6, 7, 8, 9, 10…… 最初のn個の自然数の合計は、forループまたは式を使用して計算できます。 これらの両方の方法を指定するプログラムは次のとおりです- forループを使用した自然数の合計。 forループを使用してn個の自然数の合計を計算するプログラムは次のとおりです。 例 #include<iostream> using namespace std; int main() {    int n=5, sum=0, i;