扩展欧几里得算法(exgcd)
Bezout定理:
对于任意整数a,b,存在一对整数x,y满足:a*x+b*y=gcd(a,b)
证明如下:
在欧几里得算法的最后一步:b=0,即:gcd(a,0)=a
对于b>0,根据欧几里得算法gcd(a,b)=gcd(b,a%b)。假设存在一对x,y满足:b*x+(a%b)*y=gcd(b,a%b)
因为b*x+(a%b)*y=b*x+(a-b*(a/b))*y=a*y+b*(x-(a/b)*y) //规定这里和下一行的除号'/'是向下取整。
所以令x'=y,y'=x-(a/b)*y,就得到了a*x'+b*y'=gcd(a,b)。对欧几里得算法过程应用数学归纳法,该定理成立。
代码模板如下:
int exgcd(int a,int b,int &x,int &y)
{
if (b==) return {x=; y=; return a;}//欧几里得算法最后一步,返回gcd(a,b)
int d=gcd(b,a%b,x,y);//欧几里得算法递归
int z=x; x=y; y=z-(a/b)*y;
return d;
}
注意到,上述的代码中x,y均是引用的方式进行传递的,求出x,y的一组解,并且返回a,b的最大公约数d。
那么Bezout有什么具体用处呢?求解线性方程!
具体说明如下:
对于一般的方程:a*x+b*y=c 若方程有解,则满足裴蜀定理:gcd(a,b) | c ,我们可以先求出a*x+b*y=gcd(a,b)的一组特
解x0,y0,再令x0,y0同*c/d,那么就是a*x+b*y=c 的一组特解(x0*c/d,y0*c/d)。
乘法逆元,线性同意方程求解都是需要Bezout的。
扩展欧几里得算法(exgcd)的更多相关文章
- 浅谈扩展欧几里得算法(exgcd)
		在讲解扩展欧几里得之前我们先回顾下辗转相除法: \(gcd(a,b)=gcd(b,a\%b)\)当a%b==0的时候b即为所求最大公约数 好了切入正题: 简单地来说exgcd函数求解的是\(ax+by ... 
- 扩展欧几里得算法(exGCD)学习笔记
		@(学习笔记)[扩展欧几里得] 本以为自己学过一次的知识不会那么容易忘记, 但事实证明, 两个星期后的我就已经不会做扩展欧几里得了...所以还是写一下学习笔记吧 问题概述 求解: \[ax + by ... 
- gcd(欧几里得算法)与exgcd(扩展欧几里得算法)
		欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b) => a=m*d,b=n ... 
- 扩展欧几里得算法详解(exgcd)
		一.前言 本博客适合已经学会欧几里得算法的人食用~~~ 二.扩展欧几里得算法 为了更好的理解扩展欧几里得算法,首先你要知道一个叫做贝祖定理的玄学定理: 即如果a.b是整数,那么一定存在整数x.y使得$ ... 
- 扩展欧几里得算法(EXGCD)学习笔记
		0.前言 相信大家对于欧几里得算法都已经很熟悉了.再学习数论的过程中,我们会用到扩展欧几里得算法(exgcd),大家一定也了解过.这是本蒟蒻在学习扩展欧几里得算法过程中的思考与探索过程. 1.Bézo ... 
- 欧几里得算法与扩展欧几里得算法_C++
		先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ... 
- vijos1009:扩展欧几里得算法
		1009:数论 扩展欧几里得算法 其实自己对扩展欧几里得算法一直很不熟悉...应该是因为之前不太理解的缘故吧这次再次思考,回看了某位大神的推导以及某位大神的模板应该算是有所领悟了 首先根据题意:L1= ... 
- 『扩展欧几里得算法 Extended Euclid』
		Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ... 
- 题解——洛谷P2613 【模板】有理数取余(扩展欧几里得算法+逆元)
		题面 题目描述 给出一个有理数 c=\frac{a}{b}  ,求 c mod19260817 的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 \( a \) .第二行,一个整 ... 
- 【learning】 扩展欧几里得算法(扩展gcd)和乘法逆元
		有这样的问题: 给你两个整数数$(a,b)$,问你整数$x$和$y$分别取多少时,有$ax+by=gcd(x,y)$,其中$gcd(x,y)$表示$x$和$y$的最大公约数. 数据范围$a,b≤10^ ... 
随机推荐
- nginx 基础配置详解
			#本文只对nginx的最基本配置项做一些解释,对于配置文件拆分管理,更详细的集群健康检查的几种方式,检查策略等在此不做详细解释了. #运行用户user nobody;#启动进程,通常设置成和cpu的数 ... 
- centos7下只需两个命令升级php版本
			我的php5.4 升级到5.6 sudo yum clean allsudo yum install -y php56w Resolving Dependencies --> Running t ... 
- linux系统环境下搭建coreseek(+mmseg3) (good)
			1.下载并解压coreseek软件,操作命令如下: wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz 说明:文件下 ... 
- 利用java servlet实现简单的web请求过滤和跳转
			今日有两个微信web项目合并了,但是还有些链接指向废弃的项目,另外不想在服务器上运行两份相同web项目(1.影响性能.2.维护升级容易出错),因此决定写一个简单链接跳转的项目,spring的filte ... 
- activiti--6-------------------------------------连线(一般数据库表的查询顺序)
			一.流程图 二.这次把流程图和Java类放在一个包下 三.代码 package com.xingshang.f_sequenceFlow; import java.io.InputStream; im ... 
- 事件监听机制——鼠标事件MouseEvent
			鼠标事件 鼠标事件包括鼠标的双击.左击.右击.中间键等等,本文进行事件加载进行简单介绍,具体可以参考键盘事件. import java.awt.*; import java.awt.event.*; ... 
- 【leetcode刷题笔记】Sort List
			Sort a linked list in O(n log n) time using constant space complexity. 题解:实现一个链表的归并排序即可.主要分为三部分: 1.找 ... 
- 光流法跟踪fast角点思路
			光流法需要include<opencv2/video/tracking.hpp>,用到列表,所以要include<list><vector>1.读取文件定义图像存储 ... 
- HDU1232 畅通工程,并查集
			这里要补充一些知识点,并查集三操作 1.找到父节点递归写法int Findf(int x){ if(father[x]!=x) father[x]=Findf(father[x]); return f ... 
- C#实现对外部程序的调用操作
			测试工具,首先也是一个C#的程序,它的主要目的是: 1:获取上文应用程序的窗口句柄,继而获取TextBox句柄及Button句柄: 2:为TextBox随机填入一些字符: 3:模拟点击Button: ... 
