题目链接
https://www.luogu.org/problemnew/show/P3935
题解
可以看出函数就是约数个数。直接求约数个数函数的前缀和即可。
代码
#include <cstdio>
template<typename T>
T read()
{
T x=0;
int f=1;
char ch=getchar();
while((ch<'0')||(ch>'9'))
{
if(ch=='-')
{
f=-f;
}
ch=getchar();
}
while((ch>='0')&&(ch<='9'))
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
const int mod=998244353;
int getsum(long long n)
{
int ans=0;
for(long long l=1,r; l<=n; l=r+1)
{
r=n/(n/l);
ans=(ans+(r-l+1)*(n/l))%mod;
}
return ans;
}
long long l,r;
int main()
{
l=read<long long>();
r=read<long long>();
int ans=getsum(r)-getsum(l-1);
if(ans<0)
{
ans+=mod;
}
printf("%d\n",ans);
return 0;
}