牛客练习赛25 因数个数和

题目链接

题目描述

q次询问,每次给一个x,问1到x的因数个数的和。

输入描述:

第一行一个正整数q ;
接下来q行,每行一个正整数 x

输出描述:

共q行,每行一个正整数表示答案

示例1

输入

4
1
2
3
10

输出

1
3
5
27

说明

1的因数有1

2的因数有1,2

3的因数有1,3

以此类推
备注:
1<=q<=10 ,1<= x<=109

AC

#include 
#include 
#include 
#include 
#include 
#include 
#define N 100005
#define ll long long
using namespace std;


int main() {
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
#endif
    int t;
    scanf("%d", &t);
    while (t--) {
        int n;
        scanf("%d", &n);
        ll ans = 0;
        for (int i = 1; i <= n; ++i) {
            int tar = n / i; // 当前约数
            int l = i;
            int r = n / tar; // 约数为tar的最右边的位置
            ans += (r - l + 1) * tar; //区间乘以tar
            i = r;
        }   
        printf("%lld\n", ans);
    }
    return 0;
} 

你可能感兴趣的:(练习)