HDU5428

来源:互联网 发布:手机淘宝评价管理哪儿 编辑:程序博客网 时间:2024/05/22 23:19
/*对于每一个数字,它有用的部分其实只有它的所有质因子(包括相等的)。求出所有数的所有质因子中最小的两个,相乘就是答案。如果所有数字的质因子个数不到两个,那么就是无解。时间复杂度O(n*sqrt(a))O(n&#8727;sqrt(a))*/#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <ctime>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define inf -0x3f3f3f3f#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mem0(a) memset(a,0,sizeof(a))#define mem1(a) memset(a,-1,sizeof(a))#define mem(a, b) memset(a, b, sizeof(a))typedef long long ll;ll a[110];ll count1[123456];int main(){    int t;    scanf("%d",&t);    int n;    while(t--){        scanf("%d",&n);        int cnt=0;        for(int i=1;i<=n;i++){            scanf("%I64d",&a[i]);            /*if(a[i]!=1)                count1[cnt++]=a[i];            for(int j=2;(ll)j*j<=a[i];j++){                while(a[i]%j==0){                    count1[cnt++]=j;                    a[i]/=j;                }                if(a[i]!=1){                    count1[cnt++]=a[i];                }            }*/  //这样的话素数会插入两次            for(int j=2;(ll)j*j<=a[i];j++){                while(a[i]%j==0){                    count1[cnt++]=j;                    a[i]/=j;                }            }            if(a[i]!=1){                count1[cnt++]=a[i];            }        }        if(cnt<2){            printf("-1\n");            continue;        }        else{            sort(count1,count1+cnt);            printf("%I64d\n",count1[0]*count1[1]);        }    }    return 0;}
0 0