Description
除法表达式有如下的形式: X1/X2/X3.../Xk 其中Xi是正整数且Xi<=1000000000(1<=i<=k,K<=10000) 除法表达式应当按照从左到右的顺序求,例如表达式1/2/1/2的值为1/4.但可以在表达式中加入括号来改变计算顺序,例如(1/2)/(1/2)的值为1.现给出一个除法表达式E,求是告诉是否可以通过增加括号来使其为E',E'为整数
Input
先给出一个数字D,代表有D组数据. 每组数据先给出一个数字N,代表这组数据将有N个数。 接下来有N个数
Output
如果能使得表达式的值为一个整数,则输出YES.否则为NO
Sample Input
2
4
1
2
1
2
3
1
2
3
Sample Output
YES
NO
对于这道题,首先可以发现不论如何加括号,只有第二项一定位于分母,所以只要判断第二项是否可以用其他项消除即可,下面是程序:
#include<stdio.h>
#include<iostream>
using namespace std;
int gcd(int a,int b){
int t;
while(b){
t=a%b;
a=b;
b=t;
}
return a;
}
int main(){
int t,n,x,a;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
if(n==1){
printf("YES\n");
continue;
}
if(n==2){
scanf("%d%d",&x,&a);
printf("%s\n",x%a?"NO":"YES");
continue;
}
scanf("%d%d",&x,&x);
--n;
while(--n){
scanf("%d",&a);
x/=gcd(x,a);
}
printf("%s\n",x==1?"YES":"NO");
}
return 0;
}