裴蜀定理

#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∗表示正整數集。html

證實

s=gcd(a,b),顯然sa,而且sbc++

又由於x,yZgit

因此sax,sbyspa

顯然要使得以前的式子成立,則必須知足cab的公約數的倍數code

又由於xy是正整數htm

因此c必然是a,b最大公約數的倍數。blog

所以,證得該定理成立get

針對這道題

上述裴蜀定理針對的是兩個變量。那麼咱們很天然的就想到這樣的定理可否推廣到多個變量呢?顯然能夠,證實方法同上。it

那這個題不就是推廣後的定理的裸題嗎QAQ。咱們只須要對這全部的數字求一個gcd,值得注意的是不要忘記數據中有負數,要將其變爲正數再求gcd。class

相關文章
相關標籤/搜索