欧几里德算法(自写理解)

gcd欧几里德算法  求取最大公约数gcd(a,b)

这个不用多说了

extgcd拓展欧几里德算法 用于求解 ax+by=gcd(a,b)的解

这个要多说一下

ax+by=c,(a,b,c都是常数)

这就是一个直线方程嘛!(x,y)就是一条直线的轨迹

但是呢  我们在计算机中经常要求一些离散的东西,也就是我们要求整数解

这个咋求呢,就可以用这个神仙方法extgcd可以来求

我们可以用extgcd求解 ax+by=c的整数点的解

extgcd的内容呢:extgcd可以能求gcd----原理嘛,自己慢慢想这个神仙方法。extgcd不是直接去解我们的方程 ax+by=c的,但是可以间 接求解,extgcd 求解的是什么呢

extgcd 可以直接求解的是 ax+by=gcd(a,b)的解。

也就是说我们调用extgcd可以获得的结果是ax+by=gcd(a,b)的一组整数解。

那我们要求的是什么  是ax+by=c 而不是ax+by=gcd(a,b)啊

那咋办   我们可以设置一个变量 k    axk+byk=gcd(a,b)*k 这个很好说吧!就是等式两边同时乘k。

如果我们存在整数k 使得gcd(a,b)*k等于c   那我们要求的ax+by=c的解就出来啦

就是我们extgcd 求出的解乘上这个k

如果不存在这样的k咋办("▔□▔) 自然那结果就是无解啦

原文地址:https://www.cnblogs.com/DWVictor/p/10283215.html

时间: 2024-11-11 23:32:59

欧几里德算法(自写理解)的相关文章

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

接着欧几里德算法往后写,扩展欧几里德算法常常用来解不定方程及一些相关的应用,用到的思想就是欧几里德算法的思想:通过在结果不改变的情况下不断取余而逐步缩小数据规模,两个数会不断变小,直到减小到一个数是另一个数的倍数的时候,就很容易求出他们的最小公倍数了.下面我们来说说扩展欧几里德的思想: 我们要求出 a * x + b * y = c 的所有解,其中 a,b,c 是已经告诉你的常数,而 x,y 是待求的未知量,我们要求出所有的 x,y ,其实只要求出一组 x0,y0就行了,剩下的解可以由 x=x0

Modified LCS (扩展欧几里德)细写了对这个算法思路的理解

题目:Modified LCS 为过此题去仔细研究了下扩展欧几里德算法,领悟了一些精华. 模板为: void gcd(ll a, ll b, ll& d, ll& x, ll& y) { if(!b) {d = a; x = 1; y = 0;} else{ gcd(b, a%b, d, y, x); y -= x*(a/b);} } 这里算出来的x,y是对于方程ax+by=gcd(a,b)而言的一组解. 为什么叫扩展欧几里德说明肯定用了欧几里德算法的原理即:gcd(a,b)=gc

Sicily1099-Packing Passengers-拓展欧几里德算法

最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1099.c 做这题的时候查了别人的做法花了半天都没搞明白怎么做的,我认为别的博客写的难以让人理解所以就造了这个轮子. 题目: 1099. Packing Passengers Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description PTA, Pack ‘em Tight Air

欧几里德算法gcd及其拓展终极解释

这个困扰了自己好久,终于找到了解释,还有自己改动了一点点,耐心看完一定能加深理解 扩展欧几里德算法-求解不定方程,线性同余方程. 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n*s)=k*l(k=0,1,2....) 稍微变一下形得: (n-m)*s+k*l=x-y 令n-m=a,k=b,x-y=c,即 a*s+b*l=c 只要上式存在整数解,则两青蛙能相遇,否则不能. 首先想到的一个方法是用两次for循环来枚举s,l的值,看是否存在s,l的整数解,若存在则输入最小的s, 但

扩展欧几里德算法

文章来源:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 谁是欧几里德?自己百度去 先介绍什么叫做欧几里德算法 有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b 很大的时候,枚举显得那么的na?ve ,那怎么做? 欧几里德有个十分又用的定理: gcd(a, b) = gcd(b , a%b) ,这样,我们就可以在几乎是 log 的时间复杂度里求解出来 a 和 b 的最大公约数了

分布式理论之一:Paxos算法的通俗理解

维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法. Paxos算法目前在Google的Chubby.MegaStore.Spanner等系统中得到了应用,Hadoop中的ZooKeeper也使用了Paxos算法,在上面的各个系统中,使用的算法与Lamport提出的原始Paxos并不完全一样,这个以后再慢慢分析.本博文的目的是,如何让一个小白在半

算法总结之欧几里德算法

算法总结之欧几里德算法 1.欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数. 其计算原理依赖于下面的定理: gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 代码实现: 1 int gcd(int a,int b) 2 { 3 return b==0?a:gcd(b,a%b); 4 } 2.扩展欧几里德算法 基本算法: 对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y,

欧几里德算法

欧几里德算法,又叫辗转相除法,最初见于东汉出现的<九章算术>,被用来求两个整数a,b的最大公约数,下面我们来介绍这个算法的原理和用法. 算法原理:设我们要求整数(a,b)的公约数为x,不妨设a>=b. 因为x为a和b的公约数,同时a可以表示为a=k*b+r,即r=a-k*b,那么我们很容易看出x也是r的公约数:记  r = a mod b. 反之,如果我们知道 x 是 b,a mod b的公约数,将上式做简单变换得:a = k * b + r,那么由此可知 x 也是 a,b 的公约数.

POJ 2773 Happy 2006(欧几里德算法)

题意:给出一个数m,让我们找到第k个与m互质的数. 方法:这题有两种方法,一种是欧拉函数+容斥原理,但代码量较大,另一种办法是欧几里德算法,比较容易理解,但是效率很低. 我这里使用欧几里德算法,欧几里德算法又名辗转相除法,原先单纯的用于求最大公约数,这里也算是一个小小的拓展应用,这个题利用的欧几里德算法的重要性质,假如a与b互质,那么b*t+a与b也一定互质,那样我们可以枚举1-m之间所有符合条件的数,然后打一个表格,求出所有符合条件的数,正如下表中的(5,5)所示,这个表格是一个带有周期性的自