与えられた数がC++の最初のn個の自然数の合計であるかどうかを調べます
この問題では、数値numが与えられます。私たちの仕事は、与えられた数が最初のn個の自然数の合計であるかどうかを見つけることです。
問題の説明: ここでは、与えられた数が最初のn個の自然数の合計であるかどうかを確認する必要があります。
問題を理解するために例を見てみましょう
入力: num =55
出力: はい、10
説明:
55は、最初の10個の自然数、1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9+10の合計です。
ソリューションアプローチ:
問題を解決するための簡単なアプローチは、num以上になるまでn個の自然数の合計を見つけることです。
合計がnumに等しい場合は、nを返します。
nのいずれかの値で、合計がnより大きくなる場合は、-1を返します。
ソリューションの動作を説明するプログラム
例
#include <iostream> using namespace std; int isNatSum(int num){ int sum = 0; for (int n = 1; sum < num; n++) { sum += n; if (sum == num) return n; } return -1; } int main(){ int num = 55; int n = isNatSum(num); if(n == -1) cout<<"The value is not sum of natural numbers"; else cout<<"The value is a sum of first "<<n<<" natural numbers"; return 0; }
出力-
The value is a sum of first 10 natural numbers
この方法は優れていますが、n個の自然数の合計の数式を使用して問題をより効率的に解決できます。
最初の相互数の合計は、次の式で与えられます。
sum =n *(n + 1)/ 2
合計が与えられ、nの値を見つける必要があります
したがって、nを見つけるために2次方程式を作成する必要があります。
=>2*合計=n 2 + n
=> n 2 + n-2 * sum =0、2次方程式
この二次方程式の解は、
です。ソリューションの動作を説明するプログラム
例
#include <iostream> #include <math.h> using namespace std; int isNatSum(int num){ int n = ( -1+ sqrt (1 + (8*num) ))/2; if(ceil(n)==floor(n)){ return n; } return -1; } int main(){ int num = 55; int n = isNatSum(num); if(n == -1) cout<<"The value is not sum of natural numbers"; else cout<<"The value is a sum of first "<<n<<" natural numbers"; return 0; }
出力
The value is a sum of first 10 natural numbers
-
最初の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 &
-
再帰を使用して自然数の合計を見つけるC++プログラム
自然数は1から始まる正の整数です。 自然数のシーケンスは-です 1, 2, 3, 4, 5, 6, 7, 8, 9, 10…… 再帰を使用して最初のn個の自然数の合計を見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int sum(int n) { if(n == 0) return n; else return n + sum(n-1); } int main() { &