可被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个自然数的总和-Sn/x=((n/x)/2)*(2*x+(n/x-1)*x)
使用该公式可找到被y整除的n个自然数的总和-Sn/y=((n/y)/2)*(2*y+(n/y-1)*y)
现在,使用该公式可以找到被x和y整除的n个自然数的总和:Sn/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
第二种方法更好,因为它不使用任何意味着更好的时间复杂度的循环。但是,如果输入条件小于第一个条件,则也可以使用。但是对于大量输入的情况,第二种方法不是最佳选择。