裴
蜀
定
理
裴蜀定理
裴蜀定理
设
a
,
b
a,b
a,b为正整数,则关于
x
,
y
x,y
x,y的方程
a
x
+
b
y
=
c
ax+by=c
ax+by=c有整数解当且仅当
c
c
c是
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)的倍数。也即:
a
x
+
b
y
=
k
∗
g
c
d
(
a
,
b
)
ax+by=k*gcd(a,b)
ax+by=k∗gcd(a,b)
那么裴蜀定理针对多组变量是否成立呢?
首先来理解一下裴蜀定理
a
x
+
b
y
=
k
∗
g
c
d
(
a
,
b
)
ax+by=k*gcd(a,b)
ax+by=k∗gcd(a,b)
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)一定整除
a
x
ax
ax和
b
y
by
by(假定存在整数解)
那么也一定整除
a
x
+
b
y
ax+by
ax+by因此
c
c
c必须是它的倍数
对于其他情况也是完全成立的
a
1
x
1
+
a
2
x
2
+
…
…
+
a
n
x
n
=
k
∗
g
c
d
(
a
1
,
a
2
…
…
a
n
)
a_1x_1+a_2x_2+……+a_nx_n=k*gcd(a_1,a_2……a_n)
a1x1+a2x2+……+anxn=k∗gcd(a1,a2……an)
#include<iostream>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)
{
return b ? gcd(b, a % b) : a;
}
int main(){
ll t;
cin>>t;
int a,b;
cin>>a;
if(a<0)a=-a;
for(ll i=1;i<t;i++){
cin>>b;
if(b<0)b=-b;
a=gcd(a,b);
}
cout<<a<<endl;
}