求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;
   }

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

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

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

问题: 求数A和B的最大公约数.原理:     1. 大数对小数进行取余操作, 如果结果为0, 小数为大数的约数.    2. 大数对小数取余, 如果结果不为0, 则结果必然是导致小数不能成为大数约数...
  • lgg201
  • lgg201
  • 2009年12月13日 23:54
  • 1935

java欧几里得算法求最大公约数

public class Euclid { /** * @param args */ public static void main(String[] args) { System....
  • qsl19900126
  • qsl19900126
  • 2013年03月18日 19:30
  • 958

求两个数的最大公约数算法

转载地址:http://blog.163.com/xiaoting_hu/blog/static/5046477220136491243567/ 1.辗转相除法 辗转相除法是求两个自然数的最大公约...
  • u010889616
  • u010889616
  • 2015年12月03日 14:57
  • 2021

用java实现欧几里得算法求两个数字的最大公约数

最大公约数 最大公约数的定义是两个不全为0的非负整数m和n的最大公约数记为gcd(m , n),代表能够整除(即余数为0)的最大整数。 欧几里得算法原理: 1.如果n == 0,则m就是最大公约数...
  • HJXASLZYY
  • HJXASLZYY
  • 2015年10月26日 00:27
  • 1353

【c语言】求两个数m和n的最大公约数(辗转相除法)

// 求两个数m和n的最大公约数(辗转相除法) #include int yue( int x, int y ) { int temp; int tem; // 保证分母不为0 if( ...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015年04月23日 11:53
  • 1430

js求两个数的最大公约数

js求两个数的最大公约数function getMax(n, m) { var min = n; (m < n) && (min = m); var max = 0; for (var i =...
  • wallowyou
  • wallowyou
  • 2016年11月22日 11:40
  • 1297

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

问题描述: 求任意两个数的最大公约数。 public class Main { public static void main(String[]Args){ System.out.p...
  • qq_34594236
  • qq_34594236
  • 2016年04月26日 13:56
  • 492

c语言经典题算法1--用辗转相除法求两个数的最大公约数

题目: 用辗转相除法求两个数的最大公约数#define _CRT_SECURE_NO_WARNINGS #include #include int main() { int a, b,r; ...
  • tobe_numberone
  • tobe_numberone
  • 2017年08月13日 20:11
  • 381

js,找出两个数的最大公约数

比如说有要求a、b两个整数的最大公约数,a>b,那么我们先用a除以b,得到商8,余数r1:a÷b=q1…r1我们当然也可以把上面这个式子改写成乘法式:a=b*q1+r1------l)如果r1=0,那...
  • u013415189
  • u013415189
  • 2016年08月03日 20:36
  • 1673
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求2个数的最大公约数--欧几里德算法
举报原因:
原因补充:

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