C. Otro problema más de conteo
Título: ttt pruebas, cada prueba dadaa, b, qa, b, qa , b , q
seguido deqqq veces consultas, dadoli, ri l_i, r_ilyo,ryo, Pregunta [li, ri] [l_i, r_i][ lyo,ryo] En el intervalo tal que((x mod a) mod b) ≠ ((x mod b) mod a) ((x \ bmod a) \ bmod b) \ ne ((x \ bmod b) \ bmod a)( ( xm o da )m o db )=( ( xm o db )m o da ) el número de dígitos x
Idea:
Encuentre la ley ( a <b a <buna<b )
每个 使得((x mod a) mod b) = ((x mod b) mod a) ((x \ bmod a) \ bmod b) = ((x \ bmod b) \ bmod a)( ( xm o da )m o db )=( ( xm o db )m o da ) se establece en el rango[1, b - 1], [mcm (a, b), mcm (a, b) + b - 1] [1, b-1], [mcm (a, b), mcm (a, b) + b-1][ 1 ,si-1 ] ,[ l c m ( una ,b ) ,l c m ( una ,b )+si-1 ]
把ri - li + 1 r_i-l_i + 1ryo-lyo+1 número menos el número establecido:[1, rii] [1, r_ii][ 1 ,ryoi ] el número de establecimientosco coc o menos[1, li - 1] [1, l_i-1][ 1 ,lyo-1 ] el número de establecimientospr prp r。
int n;
/*int main(){///找规律部分
LL l,a=7ll,b=14ll,r,ans;
for(int i=1;i<=200;i++){
if((i%a)%b==(i%b)%a)
cout<<i<<" ";
}
return 0;
}*/
LL ans[maxn];
int main(){
int t,f1=0,f0=0,len,q;
LL l,a,b,r,tt,co,pr,minn,maxx;
t=ird();
while(t--){
a=lrd();b=lrd();q=ird();
tt=llcm(a,b);
if(a>b)swap(a,b);
if(a==b||b%a==0){
for(int i=1;i<=q;i++){
l=lrd();r=lrd();}
for(int i=1;i<=q;i++)
cout<<0<<" ";
cout<<endl;
continue;
}
for(int i=1;i<=q;i++){
l=lrd();r=lrd();
co=r/tt*b;
if(r<r/tt*tt+b-1&&co){
co-=r/tt*tt+b-1-r;}
pr=(l-1)/tt*b;
if((l-1)<(l-1)/tt*tt+b-1&&pr){
pr-=(l-1)/tt*tt+b-1-l+1;}
co-=pr;
ans[i]=r-l+1-co;
minn=min(r,b-1ll);
maxx=max(l,1ll);
if(minn>=maxx)ans[i]-=minn-maxx+1;
}
for(int i=1;i<=q;i++)
cout<<ans[i]<<" ";
cout<<endl;
}
}