原题链接:Dashboard - Codeforces Round 929 (Div. 3) - Codeforces
这里大致给下翻译
简单讲下我的思路
对于每组数组
1: 算出这些数的最大公因数
2: 统计每个数字出现次数
如果 1 得出的最大公因数在这些数字中出现的次数 > 1 , 那么答案是 NO
反之 答案是 YES
(不会证明 , 看样例的时候感觉是这样没想到就AC了 哈哈哈)
代码如下
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 1e5 + 10;
const int inf = 2147483647;
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
void solve()
{
int n , num , ans;
map <int , int> mp;
cin >> n;
for (int i = 0 ; i < n ; i++)
{
cin >> num;
mp[num] ++;
if (i == 0)
{
ans = num;
}
else
{
ans = gcd(ans , num);
}
}
if (mp[ans] > 1)
{
cout << "NO" << endl;
}
else
{
cout << "YES" << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--)
{
solve();
}
return 0;
}