可被X或Y整除的前N个自然数之和

将X或Y可整除的所有自然数加到n,就是选择X或Y可整除的所有自然数并将它们加到存储和的变量中。

要找到可以被X或Y整除的前N个自然数的和,有两种方法-

  • 使用循环和条件语句

  • 使用公式

方法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的总和相加,然后减去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

第二种方法更好,因为它不使用任何意味着更好的时间复杂度的循环。但是,如果输入条件小于第一个条件,则也可以使用。但是对于大量输入的情况,第二种方法不是最佳选择。

以上是 可被X或Y整除的前N个自然数之和 的全部内容, 来源链接: utcz.com/z/327106.html

回到顶部