题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5428
题意:给你N个数,让你求出这N个数最小的因子之积,但要满足一个条件,那就是这个乘积必须包含三个因子,可以为本身;
解题思路:对于每一个数字,它有用的部分其实只有它的所有质因子(包括相等的)。求出所有数的所有质因子中最小的两个,相乘就是答案。如果所有数字的质因子个数不到两个,那么就是无解。时间复杂度 O(n∗sqrt(a)) 。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100005;
int n;
long long fac[maxn];
int main()
{
int t;
long long x;
scanf("%d",&t);
while(t--)
{
int cnt = 0;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
scanf("%lld",&x);
for(long long j = 2; j * j <= x; j++)
while(x % j == 0)
{
x /= j;
fac[cnt++] = j;
}
if(x > 1)
fac[cnt++] = x;
}
sort(fac,fac+cnt);
if(cnt >= 2)
printf("%lld\n",fac[0]*fac[1]);
else printf("-1\n");
}
return 0;
}