zzuli1783: 简单的求和---求因子和

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>
using namespace std;
#define N 1000002
#define INF 0x3f3f3f3f
#define met(a, b) memset(a, b, sizeof(a))

long long sum[N]={0, 1};

void make()///打表求N以内的所有因子和;
{
    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; i*j<N; j++)
            sum[i*j]+=i+j;///i和j一定是i*j的因子;
        sum[i*i]+=i;
    }
    for(int i=1; i<N; i++)
        sum[i]+=sum[i-1];
}

int main()
{
    make();

    int T, l, r;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d %d", &l, &r);
        printf("%lld
", sum[r]-sum[l-1]);
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4997484.html