Chinaunix首页 | 论坛 | 博客
  • 博客访问: 62326
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 256
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-10 17:54
个人简介

成功,总是从一点一滴小事做起!!!

文章分类

全部博文(30)

文章存档

2016年(5)

2015年(25)

我的朋友

分类: C/C++

2015-12-14 13:45:54

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. }  

阅读(1057) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~