可被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