#include<iostream>
#include<cstdio>
#include<unordered_map>
using namespace std;
const int mod=1e9+7;
typedef long long LL;
int n;
unordered_map<int, int> primes;//因数值映射成指数值
void divide(int x)
{
for(int i=2;i<=x/i;i++)
while(x%i==0)
{
x/=i;
primes[i]++;
}
if(x>1) primes[x]++;
}
/*
如果 N = p1^c1 * p2^c2 * ... *pk^ck
约数个数: (c1 + 1) * (c2 + 1) * ... * (ck + 1)
约数之和: (p1^0 + p1^1 + ... + p1^c1) * ... * (pk^0 + pk^1 + ... + pk^ck)
*/
int main()
{
cin>>n;
while(n--)
{
int x;
scanf("%d", &x);
divide(x);
}
LL res=1;
for(auto it:primes) res=res*(it.second+1)%mod;
cout<<res<<endl;
return 0;
}```
约数个数
最新推荐文章于 2025-03-08 20:37:51 发布