对于 a 、b 不全为0,存在整数 x 和 y 使得 gcd(a,b)=x*a+y*b ; 整数。。。也就是可以使负的。 代码: 1 int exGcd(int a,int b,int &x,int &y) 2 { 3 if(b==0) 4 { 5 x=1; 6 y=0...
分类:
编程语言 时间:
2015-08-06 01:56:41
阅读次数:
126
这道题的思路是首先我们要列出一个方程:
设它们两个所走的步数为s,那么 x+ms-(y+ns)=kL ;这里k的意思是它们两个距离的差值必须是L的整数倍。
那么整理后可以得到:(n-m)*s+kL=x-y; 我们令a=n-m, b=L, d=x-y; 那么这个方程的形式不就相当于是一个扩展欧几里得的式子吗。
我们先求出 as1+bk1=gcd(a,b) 这个式子的特解,令c=gcd(a...
分类:
编程语言 时间:
2015-08-04 11:13:49
阅读次数:
257
辗转相除法(欧几里得算法)时间复杂度:在O(logmax(a, b))以内int gcd(int a, int b){ if (b == 0) return a; return gcd(b, a % b);} 扩展欧几里得算法时间复杂度和欧几里得算法相同int extgcd(int a, int ....
分类:
其他好文 时间:
2015-07-26 23:59:26
阅读次数:
402
在看《数论》是看到欧几里得算法可以这样写,脑洞大开。1 int Gcd(int a,int b)2 {3 if(b==0) 4 return a;//出口5 return Gcd(b,a%b);6 7 }
分类:
编程语言 时间:
2015-07-26 13:56:47
阅读次数:
145
欧几里得辗转相除法,有效地处理求两个数的最大公约数问题!下面是代码和实现! 1 #include 2 int gcd(int m,int n) 3 { 4 if(m 2 int gcd(int m,int n) 3 { 4 if(m<n) 5 gcd(n,m); 6 ...
分类:
编程语言 时间:
2015-07-24 17:26:00
阅读次数:
163
最大公约数 欧几里得算法 描述:计算两个非负整数p和q的最大公约数:若q是0,则最大公约数为p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。 根据算法的自然描述,我们可以很轻松地得到以下的递归实现:1 public static int euclid(int p,...
分类:
编程语言 时间:
2015-07-13 11:38:24
阅读次数:
107
先看欧几里得算法 即辗转相除法
gcd(a, b) = gcd(b, a % b);
简单的证明
证明: 令a % b = r
设 d 是 a,b 的公约数 即 d|a && d|b
又 r = a – kb 所以 r|d 即a,b的公约数都是 b,r的公约数
设 d’ 是 b, r 的公约数 即 d’|b && d’|r
又 a = kb + r 所以d’|a 即 b,r...
分类:
其他好文 时间:
2015-07-12 12:52:17
阅读次数:
110
就像之前说的,接触到扩展欧几里得算法,是由于做到了这一题SWUSTOJ青蛙的约会之二(0481)http://www.cnblogs.com/haveyoueverbeen/p/4483218.html(查看题目信息可以戳上面的地址)解题思路:设输出结果为s,则(m*s+x)-(n*s+y)=kl(...
分类:
编程语言 时间:
2015-07-01 13:42:25
阅读次数:
129
关于扩展欧几里得算法(ExtendedEuclideanAlgorithm),我是在做青蛙的约会这一经典题目才接触到这个算法的。后面也有关于这一题的AC代码和解题思路。内容:已知a,b,求解一组x,y,使它们满足贝祖等式:ax+by=gcd(a,b)扩展欧几里得算法,就和它的名字一样是对欧几里得算法...
分类:
编程语言 时间:
2015-07-01 12:05:27
阅读次数:
134
其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a,d|b,而r = a - kb,因此d|r
因此d也是(b,a mod b)的公约数
因此(a,b)和(b,a mod b)的公约...
分类:
编程语言 时间:
2015-06-25 12:31:23
阅读次数:
142