#include

ZZNU 正约数之和

F : 正约数之和

 
Progress Bar

时间限制:1 Sec 内存限制:128 MiB
提交:267 答案正确:93

 

 


题目描述

我们把f(i)表示为i的正约数的和,而我们要求的是1<=i<=n之间所有i的f(i)之和!

输入

先输入一个正整数T,表示T个这是数据。T(T<=50)
每行输入一个正整数n。(n<10^6)

输出

输出一个数字,表示所求的数。

样例输入

复制
3
5
12
2018

样例输出

复制
21
127
3350309
    #include <iostream>
    using namespace std;
     
    int main() {
        int T, n;
        cin >> T;
        while(T--) {
          cin >> n;
          long long ans = 0;
          for(int i=1; i<=n; i++) {
              ans += n/i*i;
          }
          cout << ans << endl;
        }
        return 0;
    }
# include <stdio.h>
# include <string.h>


int a[1300001];


int main(void)
{
    int i, j;
            //把每个数的约数存在数组里。
    for (i = 1; i <= 7000000; i ++)
    {
        for (j = i; j <= 1300000; j = j+i)
        {
            a[j] += i;
        }
    }
    int t, n;
    long long sum;
    scanf("%d", &t);
    while (t --)
    {
        sum = 0;
        scanf("%d", &n);
        for (i = 1; i <= n; i ++)
            sum += a[i];
        printf("%lld\n", sum);
    }
    return 0;
}

 

posted @ 2018-05-20 23:35  0一叶0知秋0  阅读(338)  评论(0编辑  收藏  举报