ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

扩展欧几里得算法

2021-07-30 18:04:56  阅读:159  来源: 互联网

标签:prime frac gcd int 欧几里得 扩展 算法 ax mod


裴蜀定理:对于任意整数a,b,存在一对整数x,y,满足ax+by=gcd(a,b)
证明
$ \quad \ \ \ $ 在欧几里得算法的最后一步,即b=0时,显然有一对整数x=1,y=0,使得a1+00=gcd(a,0)。
$ \quad \ \ \ $ 若b>0,则gcd(a,b)=gcd(b, a mod b)。假设存在一对整数x,y,满足b*x+(a mod b) * y =gcd(b, a mod b), 因为bx+(a mod b)y=bx+(a-b$\lfloor a/b \rfloor $)y=ay+b(x- $ \lfloor a/b \rfloor $ y),所以令\(x^{\prime}\)=y,\(y^{\prime}\) =x-\(\lfloor a/b \rfloor y\),就得到了\(ax^{\prime}+by^{\prime}=gcd(a,b)\)
$ \quad \ \ \ $ 对欧几里得算法的递归过程应用数学归纳法,可证。
证毕
裴蜀定理是按欧几里得算法的思路证明的,且上述证明同时给出了整数x和y的计算方法。这种计算方法被称为扩展欧几里得算法
模板

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

上述程序返回了d=gcd(a,b),并将满足ax+by=gcd(a,b)的一组解用引用的方式返回了。
对于更一般的方程ax+by=c,它有解当且仅当d|c。(因为a,b为gcd(a,b)的倍数,ax+by也会是gcd(a,b)的倍数)我们可以先求出ax+by=d的一组解\(x_0,y_0\),然后令\(x_0,y_0\)同乘c/d,就可以得到方程ax+by=c的一组解了。
其实,方程ax+by=c通解可以表示为

\[ x=\frac{c}{d} x_0+k \frac{b}{d} \\ y=\frac{c}{d} y_0-k \frac{a}{d} \\ \]

其中,k为任意整数,d为gcd(a,b)。\(x_0,y_0\)为方程ax+by=c的一组解。

标签:prime,frac,gcd,int,欧几里得,扩展,算法,ax,mod
来源: https://www.cnblogs.com/QQ2519/p/15080797.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有