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;
}
}
分享到:
相关推荐
欧几里得算法,也称为辗转相除法,是计算两个正整数最大公约数(Greatest Common Divisor, GCD)的一种经典方法。该算法基于以下原理:两个正整数a和b(a>b)的最大公约数等于a除以b的余数c和b之间的最大公约数。...
在计算机科学和编程领域,求解最大公约数(Greatest Common Divisor,GCD)是一项基本的任务,它在数学和算法设计中具有广泛的应用。本文将深入探讨三种不同的方法来计算两个整数的最大公约数:分解质因数法、连续...
扩展欧几里得算法(Extended Euclidean Algorithm)不仅求出最大公因数,还能同时得到两个数的贝祖等式解,即存在整数x和y使得ax + by = gcd(a, b)。这对于计算模逆、线性同余方程的解等问题非常有用。 扩展...
python求最大公约数和最小公倍数 #辗转相除法 def gcd(a,b): #最大公约数函数,且最小公倍数 = 两个数相乘 / 最大公约数 if b == 0: return a else: return gcd(b,a%b) print("请输入两个数:") j,k = input()....
本主题主要关注求最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的三种常见算法,通过流程图的方式进行阐述。下面我们将详细探讨这五种算法及其流程。 1. 辗转相除法...
根据提供的文件信息,本文将详细解释如何使用C语言来实现最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的计算。 ### 最大公约数(GCD) #### 概念 最大公约数是指两个...
在计算机科学中,最大公约数(Greatest Common Divisor,GCD)是...在某些情况下,例如在寻找多个数的最大公约数时,可以先求出两个数的GCD,然后用结果与下一个数求GCD,以此类推。这样可以减少计算量,提高整体效率。
在这个特定的项目中,我们关注的是如何使用Verilog来实现一个计算两个数最大公约数(Greatest Common Divisor, GCD)的功能。 最大公约数是指能同时整除两个或两个以上整数的最大正整数。求解最大公约数有多种方法...
最大公约数(Greatest Common Divisor,GCD)算法是计算两个或多个整数的最大公共除数的数学方法。在编程领域,这个概念被广泛应用于优化算法、编码和解决数学问题。本文将深入探讨最大公约数算法的原理、常见的实现...
总结,求最大公约数的算法有多种实现,如欧几里得算法、质因数分解法和更相减损术,它们各有优缺点。理解并实现这些算法,可以深化对数论和算法设计的理解,同时对优化程序性能具有重要意义。在实际应用中,应根据...
C语言求最大公约数和最小公倍数算法总结 C语言中求最大公约数和最小公倍数的各种算法总结,包括辗转相除法和穷举法等。辗转相除法又名欧几里德法,是一种经典的算法,用于计算两个正整数的最大公约数和最小公倍数。...
辗转相除法是一种用于计算两个正整数最大公约数(Greatest Common Divisor, GCD)的经典算法。其基本思想是:对于任意两个正整数a和b(a > b),它们的最大公约数等于a除以b得到的余数r和b的最大公约数。如果b能被a...
【算法分析求最大公约数】涉及的是在编程领域中如何高效地找到两个正整数的最大公约数(Greatest Common Divisor, GCD)。本实验旨在通过C++编程语言,设计并分析不同算法的效率,同时结合时间复杂性的理论进行实际...
三种方法求最大公约数
在计算机编程中,特别是在使用Python语言进行开发时,经常需要对两个数值进行最大公约数(GCD)和最小公倍数(LCM)的计算。最大公约数是指两个或多个整数共有约数中最大的一个,而最小公倍数是指能被两个或多个整数...
在这个项目中,我们将探讨如何使用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的最大公约数:欧几里得算法...