首页 > 其他 > 详细

Codeforces Round #560 (Div. 3) D. Almost All Divisors

时间:2020-05-24 15:50:56      阅读:47      评论:0      收藏:0      [点我收藏+]

题意: 给一段序列 问有没有一个数 使得这个序列中的数都是x的因子 (除了1和x本身)

输出这个最小的数 如果不存在就输出-1

思路:写的时候想了lcm做 发现不可行,i的时候没开ll导致又TLE

正解应该是 对该序列排序 假设这个x存在的话那么只可能是第一个和最后一个的乘积为x

然后去o(sqrt(n))找出这个x的因子 比较和原数组是否相等

不相同就说明假设错误 也找不到其他的数了

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int maxn =2e5+10;
 6 
 7 int main()
 8 {
 9     ios::sync_with_stdio(false);
10     cin.tie(0);
11     int t;
12     cin>>t;
13     while(t--)
14     {
15         int n;
16         vector<int>a;
17         vector<int>b;
18         cin>>n;
19         for(int i=1;i<=n;i++)
20         {
21             int x;
22             cin>>x;
23             a.pb(x);
24         }
25         sort(a.begin(),a.end());
26         ll x=1ll*a[0]*a[n-1];
27         for(ll i=2;i*i<=x;i++) // 不加ll tle
28         {
29             if(x%i==0)
30             {
31                 b.pb(i);
32                 if(i!=x/i)
33                     b.pb(x/i);
34             }
35         }
36         sort(b.begin(),b.end());
37         if(a==b) // vector 直接比较
38             cout<<x<<\n;
39         else
40             cout<<-1<<\n;
41 
42 
43     }
44 
45 
46 }
View Code

 

Codeforces Round #560 (Div. 3) D. Almost All Divisors

原文:https://www.cnblogs.com/winfor/p/12951051.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!