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

XまたはYで割り切れる最初のN個の自然数の合計


XまたはYで割り切れるnまでのすべての自然数を合計すると、XまたはYで割り切れるすべての数が選択され、合計を格納する変数に追加されます。

XまたはYで割り切れる最初のN個の自然数の合計を見つけるには、2つの方法があります-

  • ループと条件文の使用
  • 数式の使用

方法1-ループと条件文の使用

このメソッドは、最大n個の数値をカウントし、XまたはYで割り切れる数値を選択してそれらを追加し、各反復で変数に保存するループを使用します。

サンプルコード

#include <stdio.h>
int main(void) {
   int n = 54;
   int x = 2 ;
   int y = 5;
   int sum = 0;
   for(int i = 0; i<= n; i++) {
      if(i%x == 0 || i% y == 0)
         sum = sum + i;
   }
   printf("sum of %d natural numbers divisible by %d and %d is %d" ,n,x,y,sum);
   return 0;
}

出力

sum of 54 natural numbers divisible by 2 and 5 is 881

方法2-式を使用する

この方法では、数式を使用して、数値で割り切れる最初のn個の数値の合計を求めます。

これは、式− SN / X =((N / X)/ 2)*(2 * X +(N / X-1)* X)

を使用して見つけることができます。

この式を使用して、xで割り切れるn個の自然数の合計が求められます-S n / x =((n / x)/ 2)*(2 * x +(n / x-1)* x)

この式を使用して、yで割り切れるn個の自然数の合計が求められます-S n / y =((n / y)/ 2)*(2 * y +(n / y-1)* y)

ここで、この式を使用して、xとyで割り切れるn個の自然数の合計が求められます:S n / x * y =((n /(x * y)/ 2)*(2 *(x * y)+(n /(x * y)-1)*(x * y))

ここで、xの合計とyの合計を加算し、2回加算されたx*yの合計を減算します。

サンプルコード

#include <stdio.h>
int main() {
   int n = 54;
   int x = 2, y = 5;
   int Sx, Sy, Sxy, sum;
   Sx = ((n / x)) * (2 * x + (n / x - 1) * x) / 2;
   Sy = ((n / y)) * (2 * y + (n / y - 1) * y) / 2;
   Sxy= ((n / (x * y))) * (2 * (x * y) + (n / (x * y) - 1) * (x * y))/ 2;
   sum = Sx + Sy - Sxy;
   printf("sum of %d natural numbers divisible by %d and %d is %d" ,n,x,y,sum);
   return 0;
}

出力

sum of 54 natural numbers divisible by 2 and 5 is 881

2番目の方法は、時間の複雑さを意味するループを使用しないため、より優れています。ただし、入力ケースが最初のケースよりも小さい場合は、使用することもできます。ただし、入力が多い場合は、2番目の方法が最適なオプションではありません。


  1. C最初のn個の自然数の立方和のプログラム?

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

  2. 最初の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 &