http://acm.hdu.edu.cn/showproblem.php?pid=5428
题意:给你一个数列,让你求这个数列的乘积的最小的因子,该因子应包含两个以上的因子(包括1和本身),比如4包含3个因子,那么它满足这个条件。如果找不到满足条件的因子,输出-1。
思路:对每个因子分解质因数,如果质因数的个数大于或等于2,最小的两个质因子的乘积便是答案,否则输出-1。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define ll long long
using namespace std;
ll prime[100005];
int cnt;
void prime_factor(ll n)///带相同因数的质因数分解
{
for(ll i=2;i*i<=n;i++)
{
while(n%i==0)
{
prime[cnt++]=i;
n/=i;
}
}
if(n>1)
prime[cnt++]=n;
return ;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cnt=0;
memset(prime,0,sizeof(prime));
for(int i=0;i<n;i++)
{
ll a;
scanf("%lld",&a);
prime_factor(a);
}
sort(prime,prime+cnt);
if(cnt>=2)
cout<<prime[0]*prime[1]<<endl;
else
cout<<-1<<endl;
}
}