【发布时间】:2017-07-21 18:56:20
【问题描述】:
我有一个程序,其中输入 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_);
}
谁能帮我找到更好的解决方案
【问题讨论】:
-
@Nishtha 我认为你的问题属于codereview.stackexchange.com
-
你一定要使用
long longs吗? -
您正在尝试暴力破解解决方案。许多此类问题需要您想出一种更有效的方法来解决问题。尝试优化代码是您应该尝试的最后一件事。
-
10^9 适合带符号的 32 位整数
-
我投票结束这个问题,因为它属于codereview.stackexchange.com