数论专题-扩展欧几里得算法

本篇博客是【数论专题】系列的第 \(7\) 篇,希望大家多多支持。

扩展欧几里得算法是用来求解 \(a\times x + b\times y = \gcd(a, b)\) 的一种算法。

首先,根据数论中的相关定理,此方程一定有解。

因为 \(\gcd(a, b) = \gcd(b, a\bmod\ b)\),所以 \(a\times x + b\times y = \gcd(a, b) = \gcd(b, a\bmod\ b) = x \times b + y\times (a\bmod\ b)= x\times b + y\times (a - \lfloor \frac{a}{b} \rfloor \times b) = y\times a + (x - \lfloor \frac{a}{b} \rfloor \times y)\times b\)

可以根据欧几里得算法递归,当 \(b = 0\) 时,可以得出 \(x = 1, y = 0\),。

扩展欧几里得算法流程如下:

  • \(b = 0\) 时,\(x = 1, y = 0\)
  • \(b\ne 0\),则往下递归计算 \(\gcd(b, a\bmod\ b)\),得到一组解 $ x',y'\(,根据以上的推论,\)x = y',y = x' - \lfloor \frac{a}{b} \rfloor \times y'$。

扩展欧几里得算法时间复杂度与欧几里得算法一样,为 \(O(\log \max(a, b))\)

void exgcd(int a, int b)
{
	if(b == 0)
	{
		x = 1, y = 0;//b = 0 时,x = 1,y = 0
		return;
	}
	exgcd(b, a % b);//递归
	int tmp = x;
	x = y;
	y = tmp - a / b * y;
}
posted @ 2025-08-16 15:34  Loyal_Soldier  阅读(13)  评论(0)    收藏  举报