题目链接:https://cn.vjudge.net/contest/323440#problem/C
题意:定义F(x)为x的所有因子和,现在给你l,r,求l-r之内的所有F(i)的和。
参考:https://blog.csdn.net/Healer66/article/details/82561234
for(LL l = 1,r;l <= n;l = r + 1){
r = n / (n / l);
//向下取整的答案为 (n / l)
//区间长度为(r - 1 +1)
//这里操作
}
ll get_sum(ll n)
{
ll ans = 0;
ll r;
for(ll l=1; l<=n; l=r+1)
{
r = n/(n/l);
ans +=(n/l)*(l+r)*(r-l+1)/2;
}
return ans;
}
注意这道题要用无符号整型
#include<bits/stdc++.h>
#define sll unsigned long long
using namespace std;
sll get_sum(sll n)
{
sll ans = 0;
sll r;
for(sll l=1; l<=n; l=r+1)
{
r = n/(n/l);
ans +=(n/l)*(l+r)*(r-l+1)/2;
}
return ans;
}
int main()
{
sll a,b;
cin>>a>>b;
printf("%lld\n",get_sum(b)-get_sum(a-1));
return 0;
}