Description
定义f(i)代表i的所有因子和(包括1和i),给定一个l,r。求f(l)+f(l+1)+…+f(r)。
Input
第一行输入一个t(t<1000),代表有t组测试数据,接下来每行输入两个数字l,r,(1<=l<=r<=1000000)。
Output
每行输出一个整数,代表和。
Sample Input
2
1 2
3 4
Sample Output
4
11
HINT
Source
豆子
看代码吧 。
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = 1000000 +10;
const int MAXM = 1e4;
LL sum[MAXN],ans[MAXN];
void dabiao(){
for(int i=2;i*i<=MAXN;i++){
for(int j=i;i*j<=MAXN;j++){
if(i!=j) ans[j*i]+=i+j;
else ans[j*i]+=i;
}
}
sum[1]=1;
for(int i=2;i<=MAXN;i++)
sum[i]=sum[i-1]+ans[i]+i+1;
}
int main(){
dabiao();
int t;cin>>t;
while(t--){
LL l,r;scanf("%lld%lld",&l,&r);
printf("%lld\n",sum[r]-sum[l-1]);
}
return 0;
}