观察这个式子E = X1 / X2 / X3 .... / Xn
我们设E' = Xa..../Xb....
即把加括号后的式子改成分数线的形式,有一些元素属于分子,其他的元素属于分母。
我们发现:
X1 不得不在分子
X2 不得不在分母
X3 ~ Xn 可在分子也可在分母
如果叫你把X3 ~ Xn分一部分在分子,其他的在分母,你会怎么做??
当然是把全部元素放在分子呗。。。
因此最优的 E' = X1 * X3 * X4....* Xn / X2
如果真的乘起来的话肯定会溢出,所以当然要用GCD。
清爽的30行代码(~ ̄▽ ̄)~
#include<cstdio> using namespace std; #define MAXN 10005 int T; int n, t, s; int gcd( int x, int y ){ return x % y == 0 ? y : gcd( y, x % y ); } int main(){ scanf( "%d", &T ); while( T-- ){ scanf( "%d", &n ); scanf( "%d", &t ); if ( n == 1 ){//注意特判 printf( "YES\n" ); continue; } scanf( "%d", &s ); s /= gcd( s, t ); for ( int i = 3; i <= n; ++i ){ scanf( "%d", &t ); s /= gcd( s, t ); } if ( s == 1 ) printf( "YES\n" ); else printf( "NO\n" ); } return 0; }