求最大公约数----gcd算法

1120阅读 0评论2015-12-14 YIF_zhu
分类:C/C++

gcd算法:全名 欧几里得算法 又称,用于计算两个a,b的
其计算原理依赖于下面的定理:
定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。(greatest common divisor)缩写为gcd。
gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)

下面是三种基本的不同求法:


1.基础的模运算
  1. int gcd(int a,int b)  
  2. {  
  3.     int r;  
  4.     while(b>0)  
  5.     {  
  6.          r=a%b;  
  7.          a=b;  
  8.          b=r;  
  9.     }  
  10.     return a;  
  11. }  




2.位运算计算

  1. int gcd(int a,int b)  
  2. {  
  3.     while(b^=a^=b^=a%=b);  
  4.     return a;  
  5. }  


3.递归方式实现

  1. int gcd(int a,int b)  
  2. {  
  3.     return (b>0)?gcd(b,a%b):a;  
  4. }  

上一篇:异或运算在算法中的经典运用
下一篇:街区最短路径问题分析和实现