`
xifangyuhui
  • 浏览: 185737 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]欧几里得算法(辗转相除法)求最大公约数

阅读更多

欧几里德算法又称辗转相除法,用于计算两个整数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)的公约数是一样的,其最大公约数也必然相等,得证。 

欧几里德算法就是根据这个原理来做的,其算法用JAVA语言描述为:

 

public int gcd(int m, int n) {
		if(n > m) {
			n = n ^ m;
			m = m ^ n;
			n = n ^ m;
		}
		while(n != 0) {
			int temp = m % n;
			m = n;
			n = temp;
		}
		return m;
	}

 

 


当然还有个递归版的, 其实gcd函数一般不会递归调用很多次, 所以递递归还是不错的:
public int gcd(int a, int b)
{
    if (b > 0)
    {
        return gcd(b, a % b);
    }
    return a;
} 

 

转自:http://www.cnblogs.com/dah/archive/2007/03/06/666114.html

分享到:
评论

相关推荐

    JAVA的欧几里得算法 最大公倍数

    通过欧几里得算法求到最大公约数,然后得出最小公倍数

    辗转相除法求最大公约,两个数的最大公约数

    辗转相除法,又称欧几里得算法,是一种古老的用于计算两个正整数最大公约数(Greatest Common Divisor, GCD)的方法。该方法基于一个数学原理:对于任意两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b...

    辗转相除法,也称为欧几里得算法,是求解两个整数的最大公约数的一种有效方法

    辗转相除法求最大公约 辗转相除法,也称为欧几里得算法,是求解两个整数的最大公约数的一种有效方法。

    最大公约数三种算法的C程序

    最大公约数问题的三种实现方法:欧几里得算法(辗转相除法)、试探法、因式分解法,不是完整的课程设计。

    求最大公约数.vbp

    本程序的设计目标为计算两数的最大公约数,采用的方法为辗转相除法,又名欧几里得算法采用辗转相除法计算任意两数的最大公约数

    cpp.zip_辗转相除

    编写欧几里得算法并进行测试,即使用辗转相除法求最大公约数

    数学笔记19-什么是欧几里得算法?

    什么是欧几里得算法? 欧几里得算法是求两个整数最大公约数的快速算法。...欧几里得算法是一种快速找到两个整数的最大公约数GCD的方法,也被称为“辗转相除法”。 三、欧几里得算法第4条规则的证明

    欧几里得算法的应用 (WC2009)

    辗转相除法求两个数的最大公约数是最早被数学家研究的算法之一,并且和数论中如连分数,丢番图方程有着紧密的联系。本文从基本的欧几里得算法谈起,涉及了几个数论问题的解法,并受其思想的启发,研究并解决了了几个...

    python求最大公约数和最小公倍数的简单方法

    用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。 具体代码...

    求最大公约数和最小公倍详细教程

    求解最大公约数和最小公倍数的方法有很多种,如质因数分解法、短除法、辗转相除法(欧几里得算法)等。 在实际应用中,这两个概念广泛应用于数学各个分支以及日常生活中,如分数化简、时间与速度问题、工程设计等...

    欧几里得算法的应用1

    摘要辗转相除法求两个数的最大公约数是最早被数学家研究的算法之一,并且和数论中如连分数,丢番图方程有着紧密的联系。本文从基本的欧几里得算法谈起,涉及了几个数论问题

    java求最大公约数.md

    java求最大公约数 要在Java中求两个整数的最大公约数(GCD),你可以使用欧几里得算法,也称为辗转相除法。这个算法的基本思想是反复用较小的数去除较大的数,直到余数为零为止。最后一个余数就是最大公约数。

    计算两个数的最大公约数.md

    使用辗转相除法(欧几里得算法)来计算最大公约数。辗转相除法的原理是:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。通过不断用较大的数除以较小的数,直到余数为0,此时的除数就是最大公约数。

    主要用matlab与R 实现数值分析、高等代数、数学分析中的问题

    在一般的数值分析教程中,我们学了基本的数值分析算法. 线性方程组的求解,LU分解(高斯消元法)、正定矩阵的Cholesky分解、追赶法求解特殊结构的矩阵. ...多项式最大公因数的求法(欧几里得辗转相除法)。

    全面的算法代码库

    辗转相除法求最大公约数 Greatest-Common-Divisor 堆排序 Heap-Sort ISAP算法 Improved-Shortest-Augmenting-Path(Naive) 插入排序 Insertion-Sort 字符串匹配(KMP) Knuth-Morris-Pratt 最小生成树(Kruskal...

    Matlab实现数值分析与高等代数中经典算法源代码

    而在高等代数中很多算法没有给出计算机的代码实现: 方阵行列式的求解。 方阵的逆矩阵求解。 线性方程组的求解(包括基础解系的部分)。 向量组的秩,矩阵的秩。...多项式最大公因数的求法(欧几里得辗转相除法)。

    java8源码-javaSE:JavaSE是在日常工作中整理的功能demo(如Java操作Excel表格、冒泡算法等)总结这些JavaSE常用

    欧几里得算法(辗转相除法) 2.1.1 更相减损法 2.3 other 其他算法 3.collection 集合 3.1 List 3.2 Set 3.3 Map 4.dataOperation 数据操作 4.1 BigDecimal 双精度浮点小数-价格计算常用 4.2 TODO:other 5.file...

Global site tag (gtag.js) - Google Analytics