hdu 5428 the factor(分解質因子)


給一個序列,設所有項乘積為a,求a的因子中因子個數大於2的最小因子。


將每個數分解質因子,記錄每個質因子的個數。

然后從最小的質因子開始取(累乘),直到取夠兩個(因為1和其本身也是該數的因子),此時得到的結果就是滿足條件的最小因子。

坑點:注意數據范圍

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<map>
#define INF 0x3f3f3f3f
typedef __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;
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com