hdu 5428 the factor(分解质因子)

来源:互联网 发布:人工智能的龙头股票 编辑:程序博客网 时间:2024/05/17 22:30

给一个序列,设所有项乘积为a,求a的因子中因子个数大于2的最小因子。


将每个数分解质因子,记录每个质因子的个数。

然后从最小的质因子开始取(累乘),直到取够两个(因为1和其本身也是该数的因子),此时得到的结果就是满足条件的最小因子。

坑点:注意数据范围

#include<algorithm>#include<cstdio>#include<cstring>#include<iostream>#include<queue>#include<map>#define INF 0x3f3f3f3ftypedef __int64 LL;using namespace std;LL a;map<LL,int>M;map<LL,int>::iterator it;int main(){    int n,i,t;    cin>>t;    while(t--)    {        scanf("%d",&n);        M.clear();        LL j;        for(i=0;i<n;++i){            scanf("%I64d",&a);            for(j=2;j*j<=a;++j){                while(a%j==0) {                    if(!M.count(j)) M[j]=1;                    else M[j]++;                    a/=j;                }            }            if(a!=1){                if(!M.count(a)) M[a]=1;                else M[a]++;            }        }        LL ans=1,cnt=1;        for(it=M.begin();cnt<3&&it!=M.end();++it){            while(it->second>0&&cnt<3)            {                it->second--;                ans*=it->first;                ++cnt;            }        }        if(cnt<3) puts("-1");        else        printf("%I64d\n",ans);    }    return 0;}


0 0
原创粉丝点击