c语言问题,求优化算法

2024-12-02 06:44:14
推荐回答(3个)
回答1:

试试这个——

void main(void){
int n,a,b,c[15],i,count=0,j;
scanf("%d",&n);
for(i=0;i scanf("%d",&c[i]);
scanf("%d%d",&a,&b);
for(i=a;i%8;i++);
for(;i<=b;i+=8){
for(j=0;j if(i%c[j]==0)
break;
if(j==n)
count++;
}
printf("%d\n",count);
}

回答2:

用筛法。
对于[a,b]间所有能被8整除的数:
第0趟,筛掉所有能被c[0]整除的数
第1趟,筛掉所有能被c[1]整除的数
。。。

回答3:

具体思路:

  1. 求出N+1个数(N个数+8)的最小公倍数S;

  2. 特殊处理[a,b)两端,即[a,(a / S + 1)*S)与[(b / S)*S,b)上满足条件的个数为K1;

  3. 求出在[0,S)上满足条件的个数为K2;

  4. 总个数为K2*(b / S - a / S -1)+ K1;

注:a,b的最小公倍数=a*b/gdb(a,b);