题目大意:有一长为n的数组,可以随意改变数组中元素的顺序,问能否使任意的前缀数组都满足所有数的gcd<=该数组长度
2<=n<=5e4
思路:求多个数的gcd时,随着数字增多,gcd不会变大,所以我们只要满足前两个数的gcd<=2即可,那么我们枚举每两个数,只要找到两个数gcd<=2,答案就是YES
//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int gcd(int a, int b)
{//求两个数的最大公因数
return b ? gcd(b, a % b) : a;
}
const int N = 105;
int a[N];
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int now;
int gc;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
bool flag = 0;
for (int i = 1; i <= n; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (gcd(a[i], a[j]) <= 2)
{
flag = 1;
break;
}
}
}
if (flag)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}