题意:给你一个数列a,是否存在一个数列b,使得
![](https://img-blog.csdnimg.cn/img_convert/a1f821bfc26e94089f414edde0b9d01c.png)
解:已知两个数越大,gcd变大的可能性越大。所以每个b都要取最小。
#include<bits/stdc++.h>
using namespace std;
const int mod = 32768;
typedef long long ll;
typedef pair<int, int> PII;
inline int gcd(int a, int b)
{
return b > 0 ? gcd(b, a % b) : a;
}
void solve() {
int n;
cin >> n;
vector<int>a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
if (n < 3) { cout << "YES\n"; return; }
for (int i = 0; i < n - 2; i++) {
if (gcd(a[i]/gcd(a[i],a[i+1]), a[i + 2]/ gcd(a[i + 1], a[i + 2])) > 1) {
cout << "NO\n";
return;
}
}
cout << "YES\n";
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
solve();
}
}