题目描述:
输入 n 个整数,依次输出每个数的约数的个数。
输入格式
第一行包含整数 n。
第二行包含 n 个整数 ai。
输出格式
共 n 行,按顺序每行输出一个给定整数的约数的个数。
数据范围
1≤n≤1000,
1≤ai≤10^9
输入样例:
5
1 3 4 6 12
输出样例:
1
2
3
4
6
解题思路:
1.枚举每个数,暴力求取每个数的约数;
2.根据n与其质因数的个数关系求取;
参考代码:
###暴力
```
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int solve(int x)
{
int res =0;
for(int i=1;i*i<=x;i++)
{
if(x%i==0)
{
res++;
if(i!=x/i) res++;
}
}
return res;
}
int main()
{
scanf("%d", &n);
while (n -- )
{
int x;
cin >> x;
cout<<solve(x)<<endl;
}
return 0;
}
```
###质因数分解法
```
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int solve(int x)
{
int res = 1;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
int s = 0;
while(x%i==0) x/=i,s++;
res *= (s+1);
}
}
if(x>1) res *= 2;
return res;
}
int main()
{
scanf("%d", &n);
while (n -- )
{
int x;
cin >> x;
cout<<solve(x)<<endl;
}
return 0;
}
```