链接:点击打开链接
题意:给出一列数,在其中可以选择任意个数的数相乘,求相乘这个数的最小合数因子
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
long long prime[500005],num[500005];
int main(){
long long i,j,t,n,cur,flag,sign;
long long temp[1005];
scanf("%I64d",&t);
while(t--){
flag=0;
scanf("%I64d",&n);
for(i=0;i<n;i++){
sign=0; //因为是求一个最小的合数因子,因此只要选其中两个
scanf("%I64d",&cur); //最小质因子相乘即可
for(j=2;j*j<=cur;j++){
while(cur%j==0){ //分解质因子
temp[flag++]=j;
cur/=j;
}
}
if(cur!=1)
temp[flag++]=cur; //如果是质数直接存上
}
if(flag==0||flag==1) //质因子个数小于2输出-1
printf("-1\n");
else{
sort(temp,temp+flag);
printf("%I64d\n",temp[0]*temp[1]);
}
}
return 0;
}