求2个数的最大公约数--欧几里德算法

原创 2006年05月22日 21:48:00
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
证明: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)的公约数

假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a = kb +r ,因此d也是(a,b)的公约数 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证

void swap(int & a, int & b)
   {
       int c = a;
       a = b;
       b = c;
   }
   int gcd(int a,int b)
   {
       if(0 == a )
       {
           return b;
       }
       if( 0 == b)
       {
           return a;
       }
       if(a > b)
       {
           swap(a,b);
       }
       int c;
       for(c = a % b ; c > 0  ; c = a % b)
       {
           a = b;
           b = c;
       }
       return b;
   }

相关文章推荐

两个数的最大公约数------欧几里德算法(辗转相除法)

计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 算法步骤: 1:r = mod(a,b) 2:a = b; 3:b = r;...

欧几里德算法求最大公约数

/* 辗转相除法, 又名欧几里德算法 设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下: 用b除a,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0...
  • zhlechn
  • zhlechn
  • 2013年07月30日 11:44
  • 600

推广的欧几里德算法(求最大公约数和乘法逆元)

欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成...

趣味分数-辗转相除 (欧几里德算法) 递归算法 求最大公约数-java

问题描述: 求任意两个数的最大公约数。 public class Main { public static void main(String[]Args){ System.out.p...

最大公约数与欧几里德算法

记a、b的最大公约数为gcd(a,b)。 这里对于最大公约数的讨论仅限于非负整数,因为显然有gcd(a,b)=gcd(|a|,|b|)。 计算最大公约数的Euclid算法基于下面定理: 【GCD...

C001:最大公约数欧几里德算法及Python实现

欧几里德算法又称辗转相除法,用于计算两个整数m, n的最大公约数。其计算原理依赖于下面的定理:     gcd(m, n) = gcd(n, m mod n) 这个定理的意思是:整数m、n...

最大公约数&最小公倍数(欧几里德算法相关)

int main () /* 相减法求最小公倍数,最大公约数 */ { int m, n, a, b; scanf ("%d%d", &a, &b); m=a;n=b; ...

编程求取两个整数的最大公约数.欧几里德算法

/* 编程求取两个整数的最大公约数。 Enter two integers: 12 28 Greatest common divisor: 4 提示:分别用两个变量m、n存储两个整数。如果n为0,那么...

欧几里德算法(最大公约数算法)

欧几里德算法的思想基于辗转相除法的原理,辗转相除法是欧几里德算法的核心思想,欧几里德算法说白了其实就是辗转相除法的计算机算法的实现而已。下面我们先说说辗转相除法,辗转相除法的内容:如果用gcd(a,b...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求2个数的最大公约数--欧几里德算法
举报原因:
原因补充:

(最多只允许输入30个字)