【BZOJ】【1385】【Baltic2000】Division expression

时间:2021-11-24 18:08:00

欧几里得算法

  普通的求个gcd即可……思路题

  因为要求尽量是整数……所以 $\frac{x_1}{x_2*x_3*x_4*....*x_n}$是最大的结果了,因为$x_2$必须为分母,$x_1$必须为分子……$x_3$ ~ $x_n$可分子可分母,所以都丢到分子上,结果ans为整数的可能性最大=。=因为如果放下去相当于 $\frac{ans}{x_i^2}$ 嗯……应该很好理解- -

 /**************************************************************
Problem: 1385
User: Tunix
Language: C++
Result: Accepted
Time:120 ms
Memory:1664 kb
****************************************************************/ //BZOJ 1385
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*=sign;
}
/******************tamplate*********************/
int x[];
inline int gcd(int a,int b){return b== ? a : gcd(b,a%b);}
int main(){
int T=getint();
while(T--){
int n=getint();
F(i,,n) x[i]=getint();
x[]/=gcd(x[],x[]);
F(i,,n){
x[]/=gcd(x[],x[i]);
if (x[]==) {puts("YES");break;}
}
if (x[]!=) puts("NO");
}
return ;
}