裴蜀定理
#include <bits/stdc++.h>
#define lowbit(x) x&-x
using namespace std ;
typedef long long LL;
inline LL read(){ LL x=0; int f=1; char ch=getchar();
while(!isdigit(ch)) { if (ch=='-') f=-1; ch=getchar(); }
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); return x*f;
}
int n;
int ans;
signed main() {
n=read();
for(register int i=1;i<=n;i++) {
int tmp=read();
if(!tmp) tmp*=-1;
ans = __gcd(ans , tmp);
}
cout << abs(ans) << endl ;
return 0;
}
裴蜀定理内容
ax+by=c,x∈Z∗,y∈Z∗成立的充要条件是gcd(a,b)∣c。Z∗表示正整数集。
证明
设s=gcd(a,b),显然s∣a,并且s∣b
又因为x,y∈Z∗
所以s∣ax,s∣by
显然要使得之前的式子成立,则必须满足c是a和b的公约数的倍数
又因为x和y是正整数
所以c必然是a,b最大公约数的倍数。
因此,证得该定理成立
针对这道题
上述裴蜀定理针对的是两个变量。那么我们很自然的就想到这样的定理能否推广到多个变量呢?显然可以,证明方法同上。
那这个题不就是推广后的定理的裸题吗QAQ。我们只需要对这所有的数字求一个gcd,值得注意的是不要忘记数据中有负数,要将其变为正数再求gcd。
不存在十全十美的文章 如同不存在彻头彻尾的绝望