欧几里得算法

欧几里得算法:

  算法:gcd(a,b)=gcd(b,amodb)
  证明如下:
    令 r=amodb,设 da,b 的一个公约数。
    可得:r=abka=dxb=dy
    继而推出:r=dxkdy=d(xky)
    因此,dr 的一个因数,得证。

int gcd(int a,int b){
	if(b == 0){
		return a;
	}
	return gcd(b,a % b);
}

扩展欧几里得算法:

  功能:可以在知道 a,b 的情况下求解 ax+by=gcd(a,b) 的一组 x,y 的解。
  证明如下:
    已知有方程 ax0+by0=gcd(a,b),由欧几里得算法可得,存在bx1+(amodb)y1=gcd(b,amodb)
    由欧几里得算法得ax0+by0=bx1+(akb)y1
    移项,得:ax0+by0=ay1+b(x1ky1)
    易得:{x0=y1y0=x1ky1k=a/b

int x,y;
void ex_gcd(int a,int b){
	if(b == 0){
		x = 1;
		y = 0;
		return;
	}
	ex_gcd(b,a % b);
	int t = x;
	x = y;
	y = t - (a/b)*y;
}

应用:

  • 判断不定方程 ax+by=c 是否有解:
    有解的条件:cmodgcd(a,b)=0
  • 得出不定方程的通解:
    {x=x0+b/gcd(a,b)y=y0a/gcd(a,b)
  • 模线性方程 a×xb(modn) 的解
    由方程可得:(a×xb)modn=0
    于是设出方程 a×xn×y=b
      由第二条即可解出
posted @   腾云今天首飞了吗  阅读(220)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示