题意:一个数是这n个数的乘,找出它一个不是素数的最小因子
求出所有数的所有质因子中最小的两个,相乘就是答案。如果所有数字的质因子个数不到两个,那么就是无解。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; #define maxn 105 #define mod 1000000007 int a[maxn]; int num[maxn]; int main() { int T; scanf("%d",&T); while(T--) { int n; ll x; int len = 0; scanf("%d",&n); for(int i = 1; i <= n; i++) { scanf("%I64d",&x); for(int j = 2; j *j<=x; j++) { while(x%j == 0) { x /= j; num[len++] = j; } } if(x > 1) num[len++] = x; } sort(num,num+len); if(len < 2) printf("-1 "); else { printf("%I64d ",(ll)num[0] * num[1]); } } return 0; }
/*我只是希望自己尽可能做得比别人好而已,而且,讨厌失败,更讨厌失败了却还不知道努力*/