您的位置:首页 > 其它

多校连萌 简单的求和

2015-11-22 15:40 246 查看
http://acm.zzuli.edu.cn/problem.php?id=1783

简单的求和

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


#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <queue>
#include <stack>
#include <vector>
#include <map>

using namespace std;
typedef long long LL;

#define N 1010000
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-8
#define met(a, b) memset (a, b, sizeof (a))

LL sum
;

void Init ()
{
sum[1] = 1;
for (int i=2; i<=N; i++)
sum[i] += i+1;//将1和本身存上

for (int i=2; i*i<=N; i++)
{
for (int j=i+1; j*i<=N; j++)
sum[i*j] += i+j;//i和j一定是i*j的两个因子
sum[i*i] += i;//i*i是完全平方数
}

for (int i=1; i<=N; i++)
sum[i] += sum[i-1];
}

int main ()
{
int t, l, r;
Init ();
scanf ("%d", &t);

while (t--)
{
scanf ("%d %d", &l, &r);
printf ("%lld\n", sum[r]-sum[l-1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: