欧几里得算法

  普通的求个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}$ 嗯……应该很好理解- -


【BZOJ】【1385】【Baltic2000】Division expression_#define【BZOJ】【1385】【Baltic2000】Division expression_#define_02


1 /**************************************************************
2 Problem: 1385
3 User: Tunix
4 Language: C++
5 Result: Accepted
6 Time:120 ms
7 Memory:1664 kb
8 ****************************************************************/
9
10 //BZOJ 1385
11 #include<cstdio>
12 #include<cstring>
13 #include<cstdlib>
14 #include<iostream>
15 #include<algorithm>
16 #define rep(i,n) for(int i=0;i<n;++i)
17 #define F(i,j,n) for(int i=j;i<=n;++i)
18 #define D(i,j,n) for(int i=j;i>=n;--i)
19 using namespace std;
20 int getint(){
21 int v=0,sign=1; char ch=getchar();
22 while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();}
23 while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();}
24 return v*=sign;
25 }
26 /******************tamplate*********************/
27 int x[100086];
28 inline int gcd(int a,int b){return b==0 ? a : gcd(b,a%b);}
29 int main(){
30 int T=getint();
31 while(T--){
32 int n=getint();
33 F(i,1,n) x[i]=getint();
34 x[2]/=gcd(x[2],x[1]);
35 F(i,3,n){
36 x[2]/=gcd(x[2],x[i]);
37 if (x[2]==1) {puts("YES");break;}
38 }
39 if (x[2]!=1) puts("NO");
40 }
41 return 0;
42 }

View Code