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; }