涉及知识点:
solution:
- \(题目要求相邻且互质的元素才可以互相交换,我们先不考虑相邻\)
- \(假设n = 6,我们只列出来偶数的相对位置:\)
- \(假设偶数的相对位置为2,6,4,因为6一定会和4相遇,那么无论如何都无法变成2,4,6\)
- \(再次假设n = 6,我们只列出来3和6的位置:\)
- \(假设3和6的相对位置为6,3,同理,无论如何都无法变成3,6\)
- \(做法已经出来了,我们不需要考虑中间的状态,只需考虑能否转移到最终的状态:\)
- \(问题转化成:对于第i个值,前面是否有和其不互质,且大于它的数,如果有,答案一定是No\)
- \(那最暴力的做法,就是对于第i个值,求出它所有的因子,将因子作为参数比较\)
- \(比如6和3,6的因子包括2,3和6,3的因子只有3,但是3作为因子已经在前面的6出现过,且6>3\)
std:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 100005;
int flag[maxn];
int main()
{
int n,x;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
if(flag[x] > x){
printf("No\n");
return 0;
}
flag[x] = x;
for(int j=2;j*j<=x;j++){
if(x%j == 0){
int k1 = j,k2 = x/j;
if(flag[k1] > x || flag[k2] > x){
printf("No\n");
return 0;
}
flag[k1] = flag[k2] = x;
}
}
}
printf("Yes\n");
return 0;
}