【$n$个数乘积约数个数】 约数个数

传送门

题意

给定\(n\)个数,求这些数的乘积的约数的个数,答案\(mod\; 10^{9}+7\)

数据范围

\(\begin{array}{l}1 \leq n \leq 100 \\ 1 \leq a_{i} \leq 2 \times 10^{9}\end{array}\)

题解

累计这\(n\)个数包含的所有质因子的指数,最后用指数来计算即可最后通过指数的不同取法根据乘法原理来计算

Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)

const int mod=1e9+7;
unordered_map<int,int>primes;

int main()
{
    int n;cin>>n;
    while(n--)
    {
        int x;cin>>x;
        for(int i=2;i<=x/i;i++)
        {
            while(x%i==0)
            {
                x/=i;
                primes[i]++;
            }
        }
        if(x>1) primes[x]++;
    }
    ll ans=1;
    for(auto it:primes)
        ans = ans * (it.second +1)%mod;
    cout<<ans<<endl;
}

posted @ 2020-10-22 21:56  Hyx'  阅读(178)  评论(0)    收藏  举报