acwing 870. 约数个数

给定n个正整数ai,请你输出这些数的乘积的约数个数, 答案对1e9+7取模

 

#include<bits/stdc++.h>
#define MOD 1000000007
#define N 100000
using namespace std;
map<int,int>d;
int a[N],p[N];
int n,num,cut;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int k;
        scanf("%d",&k);
        for(int j=2;j*j<=k;j++)
            if(k%j==0)
            {
                if(d[j])num=d[j];
                else{cut++;num=d[j]=cut;a[num]=j;}
                while(k%j==0) {k/=j;p[num]++;}
            }
            if(k>1)
            {
                int j=k;
                if(d[j])num=d[j];
                else{cut++;num=d[j]=cut;a[num]=j;}
                p[num]++;
            }
    }
    long long s=1;
    for(int i=1;i<=cut;i++)
    s=s*(p[i]+1),s%=MOD;
    cout<<s;
    return 0;
}

 

posted @ 2020-12-27 15:35  君与  阅读(72)  评论(0编辑  收藏  举报