`
superich2008
  • 浏览: 325642 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

gcd算法(求最大公约数)

阅读更多
  gcd算法:给定俩个正整数m,n(m>=n),求它们的最大公约数。(注意,一般要求m>=n,若m<n,则要先交换m<->n。下文,会具体解释)。以下,是此算法的具体流程:
    1、[求余数],令r=m%n,r为n除m所得余数(0<=r<n);
    2、[余数为0?],若r=0,算法结束,此刻,n即为所求答案,否则,继续,转到3;
    3、[重置],置m<-n,n<-r,返回步骤1.


此算法的证明,可参考计算机程序设计艺术第一卷:基本算法。

    ok,下面,举一个例子,你可能看的更明朗点。
    比如,给定m=544,n=119,
      则余数r=m%n=544%119=68; 因r!=0,所以跳过上述步骤2,执行步骤3。;
      置m<-119,n<-68,=>r=m%n=119%68=51;
      置m<-68,n<-51,=>r=m%n=68%51=17;
      置m<-51,n<-17,=>r=m%n=51%17=0,算法结束,

    此时的n=17,即为m=544,n=119所求的俩个数的最大公约数。

    再解释下上述gcd(m,n)算法开头处的,要求m>=n 的原因:举这样一个例子,如m<n,即m=119,n=544的话,那么r=m%n=119%544=119,
    因为r!=0,所以执行上述步骤3,注意,看清楚了:m<-544,n<-119。看到了没,尽管刚开始给的m<n,但最终执行gcd算法时,还是会把m,n的值交换过来,以保证m>=n。


	/**
	 * 求最大公约数
	 * 
	 * @param m
	 * @param n
	 * @return
	 */
	public static int gcd(int m, int n)
	{
		if (m < 0 || n < 0)
		{
			System.err.println("ERROR!!");
			return -1;
		}
		
		while (true)
		{
			if ((m = m % n) == 0)
				return n;
			if ((n = n % m) == 0)
				return m;
		}
	}
分享到:
评论

相关推荐

    欧几里德算法求最大公约数——C++代码

    欧几里得算法,也称为辗转相除法,是计算两个正整数最大公约数(Greatest Common Divisor, GCD)的一种经典方法。该算法基于以下原理:两个正整数a和b(a&gt;b)的最大公约数等于a除以b的余数c和b之间的最大公约数。...

    利用三种算法求最大公约数

    在计算机科学和编程领域,求解最大公约数(Greatest Common Divisor,GCD)是一项基本的任务,它在数学和算法设计中具有广泛的应用。本文将深入探讨三种不同的方法来计算两个整数的最大公约数:分解质因数法、连续...

    算法_用欧几里得算法求最大公因数_

    扩展欧几里得算法(Extended Euclidean Algorithm)不仅求出最大公因数,还能同时得到两个数的贝祖等式解,即存在整数x和y使得ax + by = gcd(a, b)。这对于计算模逆、线性同余方程的解等问题非常有用。 扩展...

    基础算法-python求最大公约数和最小公倍数

    python求最大公约数和最小公倍数 #辗转相除法 def gcd(a,b): #最大公约数函数,且最小公倍数 = 两个数相乘 / 最大公约数 if b == 0: return a else: return gcd(b,a%b) print("请输入两个数:") j,k = input()....

    求最大公约数最小公倍数的3种算法的流程图

    本主题主要关注求最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的三种常见算法,通过流程图的方式进行阐述。下面我们将详细探讨这五种算法及其流程。 1. 辗转相除法...

    如何用c语言求最大公约数和最小公倍数

    根据提供的文件信息,本文将详细解释如何使用C语言来实现最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的计算。 ### 最大公约数(GCD) #### 概念 最大公约数是指两个...

    三种算法求最大公约数

    在计算机科学中,最大公约数(Greatest Common Divisor,GCD)是...在某些情况下,例如在寻找多个数的最大公约数时,可以先求出两个数的GCD,然后用结果与下一个数求GCD,以此类推。这样可以减少计算量,提高整体效率。

    Verilog求最大公约数

    在这个特定的项目中,我们关注的是如何使用Verilog来实现一个计算两个数最大公约数(Greatest Common Divisor, GCD)的功能。 最大公约数是指能同时整除两个或两个以上整数的最大正整数。求解最大公约数有多种方法...

    最大公约数算法

    最大公约数(Greatest Common Divisor,GCD)算法是计算两个或多个整数的最大公共除数的数学方法。在编程领域,这个概念被广泛应用于优化算法、编码和解决数学问题。本文将深入探讨最大公约数算法的原理、常见的实现...

    设计出3个版本的求最大公约数的算法

    总结,求最大公约数的算法有多种实现,如欧几里得算法、质因数分解法和更相减损术,它们各有优缺点。理解并实现这些算法,可以深化对数论和算法设计的理解,同时对优化程序性能具有重要意义。在实际应用中,应根据...

    C语言求最大公约数和最小公倍数算法总结

    C语言求最大公约数和最小公倍数算法总结 C语言中求最大公约数和最小公倍数的各种算法总结,包括辗转相除法和穷举法等。辗转相除法又名欧几里德法,是一种经典的算法,用于计算两个正整数的最大公约数和最小公倍数。...

    用辗转相除法求最大公约数

    辗转相除法是一种用于计算两个正整数最大公约数(Greatest Common Divisor, GCD)的经典算法。其基本思想是:对于任意两个正整数a和b(a &gt; b),它们的最大公约数等于a除以b得到的余数r和b的最大公约数。如果b能被a...

    算法分析求最大公约数

    【算法分析求最大公约数】涉及的是在编程领域中如何高效地找到两个正整数的最大公约数(Greatest Common Divisor, GCD)。本实验旨在通过C++编程语言,设计并分析不同算法的效率,同时结合时间复杂性的理论进行实际...

    GCD最大公约数

    三种方法求最大公约数

    Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例

    在计算机编程中,特别是在使用Python语言进行开发时,经常需要对两个数值进行最大公约数(GCD)和最小公倍数(LCM)的计算。最大公约数是指两个或多个整数共有约数中最大的一个,而最小公倍数是指能被两个或多个整数...

    基于VHDL语言求最大公约数的GCD算法ISE软件实现

    在这个项目中,我们将探讨如何使用VHDL来实现最大公约数(Greatest Common Divisor, GCD)算法,并在Xilinx ISE软件平台上进行仿真和综合,最终在 Spartan 3E FPGA 开发板上验证。 最大公约数是两个或多个整数的...

    求最大公约数

    连续整数检测法求最大公约数算法步骤 - 输入两个正整数m和n。 - 初始化t为较小的那个数。 - 从t开始向下递减直到1。 - 检查t是否能同时被m和n整除: - 如果不能,则继续递减t; - 如果可以,则输出t并结束程序。 ...

    连续整数检测法分解质因数法求最大公约数

    根据提供的文件信息,我们可以归纳出三个主要的知识点:利用连续整数检测法分解质因数求最大公约数、使用欧几里得算法求最大公约数以及字符串匹配算法(包括BF、KMP和BM算法)。接下来将对这些知识点进行详细的解释...

    用递归算法实现两个整数最大公约数的计算

    这种设计遵循了欧几里得算法的逻辑,通过不断将问题规模缩小,最终达到基线条件,从而求出最大公约数。 ### 总结 通过上述分析,我们可以看到递归算法在解决数学问题,特别是最大公约数计算上的应用。递归不仅简化...

    求最大公约数的三种算法

    在计算机科学中,求最大公约数(Greatest Common Divisor, GCD)是常见的数论问题,它在很多领域有着广泛的应用,如算法设计、密码学等。本篇将详细介绍三种不同的方法来求两个自然数m和n的最大公约数:欧几里得算法...

Global site tag (gtag.js) - Google Analytics