Codeforces Round #560 (Div. 3) D题
题目网址:http://codeforces.com/contest/1165/problem/D
题目大意:给出n个数,判断这n个数是否是某个数的所有因子(除了1和本身),如果是输出这个数,反之输出-1
题解:注意要判断全部因子,显然如果这n个数是所有因子,那么原数必是 min{ a[ i ] } * max{ a[ i ] },则先判断n个数中 a[ i ] * a[n - i + 1]是否互相相同,再判断原数的因子数和n的关系即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int maxn=2e6+7; 5 ll a[maxn]; 6 ll count(ll k) 7 { 8 ll ans=0; 9 for(ll i=2;i<=sqrt(k);i++) { 10 if(k%i==0) { 11 if(i*i==k) ans+=1; 12 else ans+=2; 13 } 14 } 15 return ans; 16 } 17 int main() 18 { 19 int T; 20 cin>>T; 21 while(T--) { 22 int n; 23 cin>>n; 24 for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); 25 sort(a+1,a+1+n); 26 ll res=a[1]*a[n]; 27 int flag=1; 28 for(int i=1;i<=n/2;i++) { 29 if(a[i]*a[n-i+1]!=a[i+1]*a[n-i]) { 30 flag=0;break; 31 } 32 } 33 if(flag==0) { 34 cout<<-1<<endl;continue; 35 } 36 if(count(res)==n) cout<<res<<endl; 37 else cout<<-1<<endl; 38 } 39 }