给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 10^9+7 取模。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个整数 ai。
输出格式
输出一个整数,表示所给正整数的乘积的约数个数,答案需对 10^9+7 取模。
数据范围
1≤n≤100,
1≤ai≤2×10^9
输入样例:
3
2
6
8
输出样例:
12
/*m=(p1)^(x1)*(p2)^(x2)*(p3)^(x3)*……
其中p1,p2,p3...是质数(素数),x1,x2,x3...是它们的指数
则m的约数的个数是(x1+1)*(x2+1)*(x3+1)*……
例如24=(2^3) * (3^1)
所以其约数的个数为(3+1)*(1+1)=8个
此题目求所给的正整数的乘积的约数的个数,仅需将所给的每个数进行质因数分解,将具有相同质数的质数相加,套公式即可
如2 = 2^1;
6 = 2^1*3^1;
8 = 2^3;
2*6*8 = 96 = 2^5*3*1
因此其96的约数个数为:(5+1)*(1+1) = 6*2 = 12;
*/
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int mod = 1e9+7;
int main()
{
int n;
cin>>n;
unordered_map<int,int> primes;//primes.first存的是分解出的质因数,primes.second是对应的质因数的指数
while(n--)
{
int num;
cin>>num;
for(int i=2;i<=num/i;i++)
{
while(num%i==0)
{
num/=i;
primes[i]++;
}
}
if(num>1) primes[num]++;
}
long long sum = 1;
for(auto prime:primes) sum = sum*(prime.second+1)%mod;
cout<<sum<<endl;
}