您的位置:首页 > 其它

HDU5428质因数分解变形式

2015-09-07 18:26 267 查看
这题当时一定是脑抽了,已经想到了是质因数分解之后的最小俩个质因数的相乘,

竟然还写错,int以内的质数有很多,看来我是想多了。

其实最简单的方法就是把每个数质因数分解之后加入vector中排个序即可,

然后直接直到vector的个数,很简单。另外注意这题要用LL。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<map>
#include<cctype>
#include<cmath>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#define LL long long
using namespace std;
const LL N=(2*1e9)+10;
int main()
{
LL t;
cin>>t;
while(t--)
{
LL n;
cin>>n;
/*  LL a[110];
for(LL i=0;i<n;i++)
cin>>a[i];
vector<LL> v;
for(LL i=0;i<n;i++)
{
for(LL j=2;j<=sqrt(a[i]*1.0);j++)
while(a[i]%j==0)
{
a[i]/=j;
v.push_back(j);
}
if(a[i]!=1)
v.push_back(a[i]);
}*/
vector<LL> v;
for(LL i=0;i<n;i++)
{
LL temp;
cin>>temp;
for(LL j=2;j*j<=temp;j++)
while(temp%j==0)
{
temp/=j;
v.push_back(j);
}
if(temp!=1)
v.push_back(temp);
}
sort(v.begin(),v.end());
if(v.size()<2)
cout<<-1<<endl;
else
cout<<v[0]*v[1]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: