Description
Input
Output
Sample Input
3
1 5
3 9
8 8
Sample Output
2
2
0
Data Constraint
Hint
笔者思路:
先预处理出22680中有多少个被喜欢的数,那么1~x中就计算有多少整段的22680,剩下的就非常少,直接搞即可。答案利用前缀思想相减。
附代码:
#include<cstdio>
using namespace std;
typedef long long ll;
const ll n=22680;
bool bz[n+5];
ll T,l,r,s;
int D(int x) {
return ((x-1)%9)+1;
}
void init() {
for(int i=1;i<=n;i++) {
int x=D(i)*i;
if(x<=n&&!bz[x]) s++,bz[x]=1;
}
}
ll GT(ll x) {
ll k=x/n*s;
for(int i=1;i<=x%n;i++) k+=bz[i];
return k;
}
int main() {
init();
scanf("%lld",&T);
while(T--) {
scanf("%lld%lld",&l,&r);
printf("%lld\n",GT(r)-GT(l-1));
}
}
老夫聊发少年狂。