题解 P4549 【裴蜀定理 / Min】

Great_Influence

2018-05-08 21:59:44

Solution

根据裴蜀定理,可以知道能够取到的数字一定是某几个数的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; } ```