描述
输入n个整数,依次输出每个数的约数的个数
输入描述:
输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
输出描述:
可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数。
示例1
输入:
5
1 3 4 6 12
输出:
1
2
3
4
6
思路
最容易想到的办法是暴力解,但是会超时。不妨求数组元素开平方的约数,当不是整数时,必有一大一小两个因子i,j满足i*j=n,即j*j<n时,相当于一下可以找到两个约束(count+=2),当j*j=n时,只算一个
题解
```cpp
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int arr[n];
for(int i=0;i<n;i++)
{
int count=0,j=0;
cin>>arr[i];
for(j=1;j*j<arr[i];j++)//j*j小于n,如果j能整除n,则必定还有一个大于j的因数i,使得j*i=n,所以加2
if(arr[i]%j==0)
count+=2;
if(j*j==arr[i])//此时两个因数J相同,只算一个
count++;
cout<<count<<endl;
}
}
return 0;
}