试试这个——
void main(void){
int n,a,b,c[15],i,count=0,j;
scanf("%d",&n);
for(i=0;i
scanf("%d%d",&a,&b);
for(i=a;i%8;i++);
for(;i<=b;i+=8){
for(j=0;j
break;
if(j==n)
count++;
}
printf("%d\n",count);
}
用筛法。
对于[a,b]间所有能被8整除的数:
第0趟,筛掉所有能被c[0]整除的数
第1趟,筛掉所有能被c[1]整除的数
。。。
具体思路:
求出N+1个数(N个数+8)的最小公倍数S;
特殊处理[a,b)两端,即[a,(a / S + 1)*S)与[(b / S)*S,b)上满足条件的个数为K1;
求出在[0,S)上满足条件的个数为K2;
总个数为K2*(b / S - a / S -1)+ K1;
注:a,b的最小公倍数=a*b/gdb(a,b);