题意简述:
n
为正整数,
一开始完全不知道这个函数smg,就把
x∗D(x)
的形式的数排好序打出来,还是毫无规律,DJY在旁边念叨这个函数是在逗你玩,然后我就把这个函数打了一遍表,才发现是
1~9
循环。(因为
n−D(n)
是9的倍数)那么
Mod 9
意义下
(1~9)
, 每个数都要能有这个因数,然后就对每种模数讨论,但对于每种模数符合的数在一个周期里相交,一开始还想着容斥什么的,后来发现只要在一个周期里赋一下
1
<script type="math/tex" id="MathJax-Element-12">1</script>即可。
#include<bits/stdc++.h>
const int M = 22680;
typedef long long ll;
ll f[M+1],T,L,R;
ll calc(ll x){
return x / M * f[M] + f[x % M];
}
int main(){
for (int i=1; i<=9; i++)
for (int j=i*i; j<=M; j+=i*9)
f[j] = 1;
for (int i=1; i<=M; i++)
f[i] += f[i - 1];
scanf("%lld",&T);
while (T--){
scanf("%lld%lld",&L,&R);
printf("%lld\n",calc(R) - calc(L - 1));
}
return 0;
}