题目链接:
比较简单的思维题。
首先,无论怎么加括号,(x_1)在分子上,(x_2)一定在分母的位置,这很显然。
对于其他数,一定可以通过加括号转移到分子上。
(具体就是先处理(x_2sim x_n),再用(x_1)去除使分数倒转。)
如(x_1/(x_2/cdots/x_n)=x_1/frac{x_2}{prod_{x=3}^nx_i}=frac{prod_{x ot=2}limits x_i}{x_2})
那么只需判断(prod_{x ot=2}limits x_i)是否整除(x_2)即可。
一开始往分解质因数的方向去想了。。其实只要对每个(x_i(i ot=2))和(x_2)找(GCD)约去即可,最后判断是否剩(1)。
时间复杂度 (O(Dnlog_2x))
#include <cstdio>
int Gcd(int a,int b){return b?Gcd(b,a%b):a;}
int t,n,x[10005];
int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&x[i]);
for(int i=1;i<=n;++i)
if(i!=2)x[2]/=Gcd(x[2],x[i]);
puts(x[2]==1?"YES":"NO");
}
return 0;
}