camp的时候做出来了,但现在再做一遍还花了一个多小时。。。
不过彻底把整数分块弄明白了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod =998244353;
ll qpow(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b/=2;
}
return ans;
}
int main()
{
int t;
cin>>t;
ll inv=qpow(2,mod-2);
// cout<<qpow(2,3)<<endl;
while(t--)
{
ll n,l,r,ans=0;
cin>>n>>l>>r;
for(ll i=l,gx;i<=r;i=gx+1)
{
gx=(n/i)?(min(r,n/(n/i))):r;
// cout<<i<<" "<<gx<<" "<<n/i<<endl;
ll x=n/i,len=gx-i+1;
ll tp=(n*n%mod-n-2*n%mod*x%mod+3*mod)*len%mod+(i+gx)*x%mod*x%mod*len%mod*inv%mod+(i*x%mod+gx*x%mod)*len%mod*inv%mod;
ans=(ans+tp%mod*inv%mod)%mod;
}
cout<<ans<<endl;
}
return 0;
}