码迷,mamicode.com
首页 > 编程语言 > 详细

扩展欧几里得算法

时间:2016-08-23 18:49:36      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

 定理:对不全为0的数a,b,存在整数x,y使得 ax+by=gcd(a,b)

可使用扩展欧几里得算法来求解x,y

/扩展欧几里德算法,求解ax+by=gcd(a,b)系数
void extendEuclid(int a, int b, int &d, int &x, int&y){
	if (!b){ d = a; x = 1; y = 0; }
	else{ extendEuclid(b, a%b, d, y, x); y -= x*(a / b); }
}

 1.求解二元不定方程 ax+by=n

   结论:方程有解得充分必要条件是gcd(a,b)|n.若(x0,y0)是方程的一组解,则方程全部解可以表示为:x=x0+b*k,y=y0-a*k, (k为任意整数)

//求ax+by=n的一个解
int solveLiner(int a, int b, int n,int&x,int&y){
	int d;
	extendEuclid(a, b, d, x, y);
	if (n%d)return 0;  //无解
	x = (n / d)*x; y = (n / d)*y;
	return 1;
}

 2求解模线性方程 ax≡b(mod n)

  首先解释 a≡b(mod n)的含义是:a和b关于n同余,即 a mod n= b mod n;充要条件是n|(a-b)

 

扩展欧几里得算法

标签:

原文地址:http://www.cnblogs.com/td15980891505/p/5800404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!