与块长无关,根号分治的上界不要直接取n 而可以取更小一点
TLE 90
sqn=sqrt(n);
for(register int j=1,xx,yy;j<=sqn;++j)
{
if(!pre[j][j]) continue;
xx=(x-1)/j+1; yy=(y-1)/j+1;
if(xx==yy){ans=pl(ans,pl(pre[j][(y-1)%j+1]-pre[j][(x-1)%j],mod)); continue;} ans=pl(ans,1ll*(yy-xx-1)*pre[j][j]%mod);
ans=pl(ans,suf[j][(x-1)%j+1]);
ans=pl(ans,pre[j][(y-1)%j+1]);
}
AC
sqn=98;
for(register int j=1,xx,yy;j<=sqn;++j)
{
if(!pre[j][j]) continue;
xx=(x-1)/j+1; yy=(y-1)/j+1;
if(xx==yy){ans=pl(ans,pl(pre[j][(y-1)%j+1]-pre[j][(x-1)%j],mod)); continue;} ans=pl(ans,1ll*(yy-xx-1)*pre[j][j]%mod);
ans=pl(ans,suf[j][(x-1)%j+1]);
ans=pl(ans,pre[j][(y-1)%j+1]);
}