链接:https://www.nowcoder.com/acm/contest/158/A
来源:牛客网
题目描述
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
分析
看
i
i
在个数中作为因子出现了多少次。因为
ix
i
x
和
i
i
总是成对出现的,因此只需要枚举到就可以了。最后减去最后减去
t2
t
2
个就行了,图中归纳可得。
代码
#include <bits/stdc++.h>
using namespace std;
long long q,x;
int main(void)
{
cin >> q;
while(q --)
{
cin >> x;
long long ans = 0,t = sqrt(x);
for(int i = 1;i <= t;i ++)
ans += (x / i);
cout << ans*2 - t * t << endl;
}
return 0;
}