对于 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