题解 P4549 【裴蜀定理 / Min】
Great_Influence
2018-05-08 21:59:44
根据裴蜀定理,可以知道能够取到的数字一定是某几个数的gcd的倍数。所以直接对所有数取gcd。直接一路滚gcd就可以了。
代码:
```cpp
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
#define For(i,a,b) for(i=(a),i##end=(b);i<=i##end;++i)
#define Forward(i,a,b) for(i=(a),i##end=(b);i>=i##end;--i)
#define Rep(i,a,b) for(register int i=(a),i##end=(b);i<=i##end;++i)
#define Repe(i,a,b) for(register int i=(a),i##end=(b);i>=i##end;--i)
#define Chkmax(a,b) a=a>b?a:b
#define Chkmin(a,b) a=a<b?a:b
using namespace std;
template<typename T>inline void read(T &x){
T s=0,f=1;char k=getchar();
while(!isdigit(k)&&k^'-')k=getchar();
if(!isdigit(k)){f=-1;k=getchar();}
while(isdigit(k)){s=s*10+(k^48);k=getchar();}
x=s*f;
}
void file(void){
#ifndef ONLINE_JUDGE
freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
#endif
}
static int s,n;
int main(void){
file();
read(n);
static int x;
Rep(i,1,n)read(x),s=__gcd(s,abs(x));
printf("%d\n",s);
return 0;
}
```