扩展欧几里得算法(解不定方程)

Posted 一只特立独行的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展欧几里得算法(解不定方程)相关的知识,希望对你有一定的参考价值。

解方程:
ax+by=gcd(a,b)
有欧几里得定理得:此方程一定有解

int extend_gcd(int a,int b,int &x,int &y) {
	//扩展欧几里得算法
	/*
	* 这是一个尾递归
	* 思路:gcd的扩展,在求gcd(a,b)的同时,解方程ax+by=gcd(a,b)
	* 因为gcd(a,b)=gcd(b,a%b)
	* 所以ax+by=bx1+(a-a/b*b)y1
	* 化简一下得到:ax+by=ay1+b(x1-a/b*y1);(得到递推式)
	* 
	* 
	* 在求得最大公约数的同时,也得到x1的初始值为1,y1的初始值为0
	* 然后开始尾递归,另x=y1,y=x1-a/b*y1
	* 
	*/
	if (b == 0) {
		x = 1;
		y = 0;
		return a;
	}
	int mygcd = extend_gcd(b,a%b,x,y);
	int temp = x;
	x = y;
	y = temp - a / b *y;
	return mygcd;
}

以上是关于扩展欧几里得算法(解不定方程)的主要内容,如果未能解决你的问题,请参考以下文章

扩展欧几里德算法的应用

扩展欧几里德算法及其应用

扩展欧几里得算法

扩展欧几里得算法的模板实现

线性方程整数解,扩展欧几里得解分析

用C语言编制的求模逆元的扩展欧几里德算法,只要能基本上实现这个功能就行