题意
给定 x1/x2/x3/x4..../xn ,可以加入括号改变运算顺序,询问是否可以使改变后的值为整数。
可知 x1 必为分母, x2 必为分子, x3,x4...xn 可以为分子也可以为分母。
可以贪心证明
若 x1∗x3∗x4∗...∗x4x2 不为整数,那么就没有其他方案使改变后的值为整数。
所以我们只要判断这个值是不是整数就行了,即
判断
x2/gcd(x2,x1)/gcd(x2,x3)/.../gcd(x2,xn)
是否为1
#include <cstdio>
int gcd(int x,int y){return y?gcd(y,x%y):x;}
int n,x,y,t;
int main(){
for(scanf("%d",&t);t;t--){
scanf("%d%d%d",&n,&y,&x);
x/=gcd(x,y);
for(int i=1;i<=n-2;i++){
scanf("%d",&y);
x/=gcd(x,y);
}
if(x==1) puts("YES");else puts("NO");
}
return 0;
}