题目描述:
给定一个n,对于i从1到n,找出有多少个不同的n/i
输入格式:
第一行一个T,表示有T组数据(T<100000)
之后T行,每行一个n(n<=10^18)
输出格式:
每行输出一个数,表示不同的个数
输入样例:
3
6
8
10
输出样例:
4
4
5
数据范围与提示:
对于50%的数据:n<=100000,T<=10
对于100%的数据:n<=10^18,T<100000
#include <iostream>
#include <vector>
#include <cmath>
int main()
{
int T;
std::cin >> T;
std::vector<unsigned long long> nums(T);
for (int i = 0; i < T; i++)
std::cin >> nums[i];
for (auto n : nums)
{
unsigned long long count = 2;
unsigned long long m = static_cast<unsigned long long>(std::sqrt(n));
for (unsigned long long i = 2; i <= m; i++)
{
auto j = n / i;
if (i == j)
count++;
else
count += 2;
}
std::cout << count << std::endl;
}
return 0;
}