裴蜀定理(贝祖定理)
定理
\(ax+by=c,x∈Z^+,y∈Z^+\)成立的充要条件是\(gcd(a,b)|c\)。
证明
-
充分性
设\(s=gcd(a,b)\),显然\(s|a\),并且\(s|b\)
因为\(x,y∈Z^+\)
所以\(s|ax,s|by\)
显然要使得之前的式子成立,则必须满足\(c\)是\(a\)和\(b\)的公约数的倍数。 -
必要性
又因为\(x\)和\(y\)是正整数
所以\(c\)必然是\(a,b\)最大公约数的倍数。
因此,证得该定理成立
说明
该定理完全可以推广到若干数的线性组合
#include <bits/stdc++.h>
using namespace std;
//最大公约数,辗转相除法
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int main() {
int n;
scanf("%d", &n);
int d = 0, a;
for (int i = 1; i <= n; i++) {
scanf("%d", &a);
d = gcd(d, abs(a)); //负数没法求最大公约数,这里认为系数都是正数,让变量x,y吃进去这个负号
}
printf("%d", d);
return 0;
}