裴蜀定理
裴蜀定理就是方程:
\[ax+by = gcd(a,b)
\]
其中 \(a,b\in N\), 一定有整数解
那为啥捏?
我们考虑\(gcd(a,b)\)是咋来的,根据辗转相除法,我们有\(gcd(a, b) = gcd(b, a\%b)\),这个是个递归过程,\(a\%b==0\) 时跳出递归。
这时我们令\(x=1, y = 0\),显然有
\[a*1+0*0 = gcd(a,0)
\]
对于某次递归过程我们设
\[a_nx_n+b_ny_n = gcd(a_n,b_n)
\]
他的前一项
\[a_{n-1}x_{n-1}+b_{n-1}y_{n-1} = gcd(a_{n-1},b_{n-1})
\]
我们知道
\[a_n = b_{n-1}
\]
\[b_n = a_{n-1}\%b_{n-1} = a_{n-1} -\left\lfloor \frac{a_{n-1}}{b_{n-1}} \right\rfloor b_{n-1}
\]
\[gcd(a_n,b_n) = gcd(a_{n-1}, b_{n-1})
\]
带入到\(a_nx_n+b_ny_n = gcd(a_n,b_n)\)得
\[a_{n-1}y_n + b_{n-1}(x_n - \left\lfloor \frac{a_{n-1}}{b_{n-1}} \right\rfloor y_n) = gcd(a_{n-1}, b_{n-1}) = gcd(a, 0)
\]
也就是说我们一定可以从\(a*1+0*0 = gcd(a,0)\)逆推\(a_0x + b_0y = gcd(a_0, b_0)\)
根据以上分析过程,我们有代码
点击查看代码
long long exgcd(long long a, long long b, long long &x, long long &y)
{
if(b==0)
{
x = 1, y = 0;
return a;
}
long long d = exgcd(b, a % b, x, y);
long long k = x;
x = y;
y = k - a / b * y;
return d;
}
这个裴蜀定理可以求逆元
求逆元其实是在解方程
\[ax\equiv 1 \pmod p
\]
这个东西也就是
\[ax-kp = 1
\]
这也启发我们只有当\(gcd(a,p) = 1\) 也就是说a与b互质时才能求模逆元
裴蜀定理的推广
对n个\(a_1, a_2...a_n\)正整数有,方程
\[a_1x_1 + a_2x_2 +...+a_nx_n = gcd(a_1, a_2 ..., a_n)
\]
一定有正整数解
方程\(ax + by = c\) 有整数解当且仅当\(gcd(a,b)|c\)
\(gcd(a,b)\)是\(f(x, y) = ax+by\) \(x, y\in N\) 的最小正值
浙公网安备 33010602011771号