我有一个程序,其中输入4个数字n,a,b,c
存在多少小于或等于n且可被a,b或c整除的数字。
示例输入案例 - 15 2 3 5 产量 11
这里n = 15,a = 2,b = 3,c = 5可被a,b或c整除的数字是2,3,4,5,6,8,9,10,12, 14,15即11个数字,因此输出为11
我尝试过这个解决方案,但时间已超过
#include<stdio.h>
long long divisibilty (long long a, long long c, long long b, long long n ) {
long long temp, min,count = 0,i;
temp = (a < b) ? a : b;
min = (c < temp) ? c : temp;
for(i=min;i<=n;i++){
if( (i % a == 0) || (i % b == 0) || (i % c == 0) ){
count++;
}
}
return count;
}
int main() {
int t_i;
long long n;
scanf("%lld", &n);
long long a;
scanf("%lld", &a);
long long b;
scanf("%lld", &b);
long long c;
scanf("%lld", &c);
long long out_ = divisibilty(a, c, b, n);
printf("%lld", out_);
}
任何人都可以帮助我找到更好的解决方案
答案 0 :(得分:4)
只给出n和a,有n / a个数可被a整除。
给定n,a和b,有A = n / a和B = n / b个数可被任意整除 - 而AB = n /(a * b)可被两者整除。解决方案是A + B-AB。
继续三个单独的数字,将有A + B + C-AB-BC-CA + ABC数字被任何一个整除,并省略重复。
答案 1 :(得分:4)