#include <iostream>
#include <map>
using namespace std;
typedef long long LL;
int n;//输入n个数 求n个数的乘积后的约数个数
const int Mod = 1e9+7;//数太大需要取余
int main(int argc, char** argv)
{
scanf("%d",&n);
//<素数,次幂>
map<int , int> Prime;
while(n--)
{
int nNum;
scanf("%d",&nNum);
//分解成质因子乘积的形式
for(int i = 2; i <= nNum/i; i++)
{
while(0 == nNum%i)//i必定是质数
{
nNum /= i;
Prime[i]++;//记录次幂
}
}
if(nNum > 1) Prime[nNum]++;
}
LL Result = 1;
//(p1^0+p1^1+p1^2+....+p1^a1)(p2^0+p2^1+p2^3+...p2^a2)....(pn^0+...pn^an)
//约数之和
for(map<int,int>::iterator it = Prime.begin(); it != Prime.end(); it++)
{
pair<int,int> a = *it;
LL t = 1;
while(a.second--)
{
t = (t * a.first + 1) % Mod
}
Result = Result * t % Mod;
}
cout<<Result<<endl;
return 0;
}
约数之和
最新推荐文章于 2024-03-21 22:48:39 发布