扩展欧几里得算法(Extended Euclidean Algorithm)

扩展欧几里得算法

其实就是辗转相除法 对于辗转相除法的证明,和扩展欧几里得算法的证明,可参考文章

https://zhuanlan.zhihu.com/p/100567253?utm_campaign=&utm_medium=social&utm_oi=1265773278007767040&utm_psn=1687548005023055872&utm_source=qq

裴蜀定理

定义:对任意一对正整数a, b,那么一定存在非零整数x, y,使得$ax + by = k*gcd(a, b)\qquad k\geq 0 \bigcap k\in z$ (指a 和b 的最大公约数的倍数)

ax + by = d 那么d 一定是最大公约数的倍数

同时a % b = a - (a / b) * b,因为计算机不会打开括号约分数,那么a / b会向下取整

题一

题一

#include <iostream>


int exgcd(int a,int b,int& x,int& y)
{
	if (!b)
	{
		x = 1, y = 0;
		return a;
	}
	int d = exgcd(b, a % b, y, x);
	y -= a / b * x;
	return d;
}

int main()
{
	int n;
	scanf("%d", &n);

	while(n--)
	{
		int a, b,x,y;
		scanf("%d%d", &a, &b);
		exgcd(a, b, x, y);
		std::cout << x << " " << y << std::endl;
	}
}