理解错题意导致就是过不了
题意: 给出了一个数组,要求找出最小的数满足它的因子全是数组里的数且不包含1和它本身,如果没有输出-1,数组是这一个数的因子,而不是说它本身也可能是一个因子在数组中。
思路:排序,将最小的乘以最大的,从头和尾依次判断成绩是否是那一个数,如果不是输出-1,如果是还要看一下这个数的因数全在这个数组里,如果有缺的输出-1,没有则输出这一个积。
注意for循环判断一个数的所有因数要对其取根号,因为如果这个数是1e10,那就超时了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int s[400];
int pd()
{
int he=s[0]*s[n-1];
for(int i=1;i<=n/2;i++){
if(s[i]*s[n-1-i]==he) continue;
else return 0;
}
return 1;
}
signed main()
{
int T;
cin>>T;
while(T--){
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n);
if(pd()){
int he=s[0]*s[n-1];
int flag=0;
for(int i=2;i<=(int)sqrt(he);i++){
int flag1=0;
if(he%i==0){
for(int j=0;j<n;j++){
if(s[j]==i){
flag1++;
break;
}
}
for(int j=0;j<n;j++){
if(s[j]==he/i){
flag1++;
break;
}
}
if(flag1!=2){
flag=1;
break;
}
}
}
if(flag==0){
cout<<he<<endl;
}
else{
cout<<-1<<endl;
}
}
else{
cout<<-1<<endl;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)