`
buaixianchen
  • 浏览: 24287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

最大公约数与最小公倍数

阅读更多

最大公约数

1、欧几里德算法 GCD(A,B) = GCD(B, A%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)的公约数是一样的,其最大公约数也必然相等,得证

   递归实现代码:

	/**
	 * 递归实现最小公约数 
	 * ---- 欧几里德算法
	 * @param a
	 * @param b
	 * @return
	 */
	public static int GCDOuJiLiDe(int a, int b) {
		if (b == 0) return a;
		return GCDOuJiLiDe(b, a % b);
	}

 

 

     

 非递归实现代码:

 

 

/**
	 * 非递归实现最小公约数
	 * ---- 欧几里德算法
	 * @param a
	 * @param b
	 * @return
	 */
	public static int GCDUsingWhile(int a, int b) {
		while (b != 0) {
			int r = b;
			b = a % b;
			a = r;
		}
		return a;
	}

 

 2、Stein算法:

如果A=0,B是最大公约数,算法结束
如果B=0,A是最大公约数,算法结束
设置A1 = A、B1=B和C1 = 1
如果An和Bn都是偶数,则An+1 =An /2,Bn+1 =Bn /2,Cn+1 =Cn *2(注意,乘2只要把整数左移一位即可,除2只要把整数右移一位即可)
如果An是偶数,Bn不是偶数,则An+1 =An /2,Bn+1 =Bn ,Cn+1 =Cn (很显然啦,2不是奇数的约数)
如果Bn是偶数,An不是偶数,则Bn+1 =Bn /2,An+1 =An ,Cn+1 =Cn (很显然啦,2不是奇数的约数)
如果An和Bn都不是偶数,则An+1 =|An -Bn|,Bn+1 =min(An,Bn),Cn+1 =Cn
n++,转4

代码实现:

 

	/**
	 * 实现最小公约数
	 * Stein算法
	 * @param a
	 * @param b
	 * @return
	 */
	public static int GCDUsingStein(int a, int b) {
		if (a == 0) return b;
		if (b == 0) return a;
		if (a % 2 == 0 && b % 2 == 0) return GCDUsingStein(a >> 1, b >> 1) << 1;
		else if (a % 2 == 0 && b % 2 != 0) return GCDUsingStein(a >> 1, b);
		else if (a % 2 != 0 && b % 2 == 0) return GCDUsingStein(a, b >> 1);
		else return GCDUsingStein(Math.abs(a - b), Math.min(a, b));
	}

 

最小公倍数 = 2数乘积 / 2数最大公约数

 

分享到:
评论

相关推荐

    最大公约数与最小公倍数程序

    ### 最大公约数与最小公倍数程序知识点详解 #### 一、背景介绍 在数学领域,特别是数论中,最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是两个非常重要的概念。最大公...

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

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

    求最大公约数和最小公倍数

    "最大公约数和最小公倍数的计算方法" 最大公约数和最小公倍数是数学中两个重要的概念,它们在算法设计、数据分析和科学计算等领域都有着广泛的应用。本文将详细介绍两种常用的计算最大公约数和最小公倍数的方法,即...

    最大公约数与最小公倍数 java

    最大公约数与最小公倍数的求法。简单明了,通俗易懂,是不错的算法

    最大公约数与最小公倍数讲义.doc

    此外,还涉及到找特定数的质因数分解,以及解决与最大公约数和最小公倍数相关的复杂问题,例如三个或更多数的最大公约数和最小公倍数的计算。在解决这类问题时,通常需要灵活运用上述方法,并理解它们之间的相互关系...

    最小公倍数 最大公约数_最小公倍数_最大公约数_

    LCM和GCD之间存在一个关系:对于任何两个正整数a和b,它们的乘积等于两者的最大公约数与最小公倍数的乘积,即`a * b = GCD(a, b) * LCM(a, b)`。求解LCM通常可以通过已知的GCD来计算,或者直接列举出所有可能的倍数...

    最大公因数与最小公倍数

    最大公因数与最小公倍数

    用LabVIEW求最大公约数和最小公倍数

    用LabVIEW求最大公约数和最小公倍数。可以自行选择数据。

    java算法—— 最大公约数、最小公倍数

    最大公约数、最小公倍数 * 最大公约数(a,b) * 12的因数:1、2、3、4、6、12 * 18的因数:1、2、3、6、9、18 * 12和18的最大公约数... * 两个数的积等于这两个数的的最大公约数与最小公倍数的积。即(a,b)*[a,b]=a*b

    python 输入两个正整数计算最大公约数和最小公倍数 示例

    python 输入两个正整数计算最大公约数和最小公倍数 示例

    输出m,n的最大公约数和最小公倍数代码

    在IT领域,尤其是在编程与算法的学习中,计算两个整数的最大公约数(Greatest Common Divisor,简称GCD)和最小公倍数(Least Common Multiple,简称LCM)是基础而又重要的知识点。从给定的文件标题“输出m,n的最大...

    小学六年级最大公约数与最小公倍数复习题精选.doc

    【最大公约数与最小公倍数】是小学六年级数学中的一个重要概念,涉及到数的整除性质和因数分解。最大公约数(Greatest Common Divisor, GCD)是指两个或多个非零整数共有约数中最大的一个,而最小公倍数(Least ...

    人教版小学数学五年级下册重难点突破卷1 最大公因数与最小公倍数的应用对比.docx

    4. **代数关系与最大公因数/最小公倍数**:若a=10b(a、b都是非零整数),则a是b的倍数,因此a和b的最大公因数是b,最小公倍数是a。 5. **两个数的关系**:两个数的最大公因数和最小公倍数之间存在这样的关系:两数...

    输入两个正整数m和n,求其最大公约数和最小公倍数.rar

    最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数最大公约数和最小倍数...

    C语言求两个数的最大公约数和最小公倍数

    在IT领域,尤其是在编程与算法设计中,求解两个数的最大公约数(Greatest Common Divisor,简称GCD)和最小公倍数(Least Common Multiple,简称LCM)是基础而重要的数学概念,广泛应用于各种计算机科学场景,如数据...

    小学奥数最大公约数与最小公倍数完整PPT课件.pptx

    小学奥数中的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是基础数学概念,对于培养孩子的数感和逻辑思维能力至关重要。这两个概念通常在解决实际问题时,如找共同分母、...

    1.最小公倍数、最大公约数的c语言程序

    在计算机编程领域,最小公倍数(Least Common Multiple, LCM)和最大公约数(Greatest Common Divisor, GCD)是两个基本的数学概念,它们在算法设计和数据分析中经常被用到。C语言是一种广泛应用的编程语言,用于...

    FPGA求最大公约数及最小公倍数verilog

    基于FPGA开发板的两位数求最大公约数和最小公倍数的设计,该设计中利用辗转相减法求得公约数与公倍数,且两个数的数值可通过按键修改,设计灵活可靠。该设计基于vivado开发,并带有testbench文件,方便仿真学习。

Global site tag (gtag.js) - Google Analytics