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的关系即可。

 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 } 
View Code

猜你喜欢

转载自www.cnblogs.com/duxing201806/p/10885994.html