裴蜀定理

#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,xZ,yZ∗成立的充要条件是gcd(a,b)c。Z∗表示正整数集。

证明

s=gcd(a,b),显然sa,并且sb

又因为x,yZ

所以sax,sby

显然要使得之前的式子成立,则必须满足cab的公约数的倍数

又因为xy是正整数

所以c必然是a,b最大公约数的倍数。

因此,证得该定理成立

针对这道题

上述裴蜀定理针对的是两个变量。那么我们很自然的就想到这样的定理能否推广到多个变量呢?显然可以,证明方法同上。

那这个题不就是推广后的定理的裸题吗QAQ。我们只需要对这所有的数字求一个gcd,值得注意的是不要忘记数据中有负数,要将其变为正数再求gcd。

不存在十全十美的文章 如同不存在彻头彻尾的绝望
原文地址:https://www.cnblogs.com/qf-breeze/p/10526804.html