精华内容
下载资源
问答
  • 标题:Java中使用欧几里得求最大公约数 /** * 求最大公约数 * @author dell * */ public class TestGcd { public int hh(int m,int n) { if(m<n) { return hh(n,m); }else if(n==0) { return m; ...

    标题:Java中使用欧几里得求最大公约数

    /**
     * 求最大公约数
     * @author dell
     *
     */
    public class TestGcd {
    	public int hh(int m,int n) {
    		if(m<n) {
    			return hh(n,m);
    		}else if(n==0) {
    			return m;
    		}else {
    			return hh(n,m%n);
    		}
    		
    	}
    	@Test
    	public void test() {
    		int hh = this.hh(16, 18);
    		System.out.println("hh:"+hh);
    	}
    	
    }
    
    展开全文
  • 欧几里得算法求最大公约数的c++代码,很完整,可以运行
  • 利用欧几里得算法求最大公因数下面给出递归和循环两种解法: (1) 循环: int EuclidByrecur(int a, int b) { int tmp; if (a % b == 0) return b; else { while (a % b != 0) { tmp = a%b; a = b;...

    利用欧几里得算法求最大公因数下面给出递归和循环两种解法:

    (1) 循环:

    int EuclidByrecur(int a, int b)
    {
    	int tmp;
    
    	if (a % b == 0)
    		return b;
    	else 
    	{
    		while (a % b != 0)
    		{
    			tmp = a%b;
    			a = b;
    			b = tmp;			
    		}
    		return b;
    	}
    }
    

    (2)递归:

    int EuclidByCir(int a, int b)//递归
    {
    	if (a % b == 0)
    	{
    		return b;
    	}
    	else
    	{
    		return EuclidByCir(b, a % b);
    	}
    }
    

    第一次写,希望可以坚持下去,,,

    展开全文
  • 欧几里得算法又称辗转相除法求最大公约数 直接从整数的素因子分解式计算两个整数的最大公约数效率很低,原因是寻找素因子分解式非常耗时,而欧几里得算法非常高效。 欧几里得算法的基础是下面关于最大公约数和整除...

    预备知识

    定理1:令a,b,c为整数,其中a ≠ 0,则
        (i)  如果a | b和a | c,则a | (b + c);
        (ii) 如果a | b,那么对所有整数c都有a | bc;
        (iii)如果a | b,b | c,则a | c。

        下面给出一个 (i) 的直接证明。假定a | b和a | c。则从整除性定义可知,存在整数 s 和 t 满足b = as和c = at。因此

    b + c = as + at = a(s + t)

    于是,a整除b + c。(ii) 和 (iii) 的证明略。

    推论1:如果a,b,c是整数,其中a ≠ 0,使得a | b和a | c,那么当 m 和 n 是整数时有 a | mb + nc。

        采用直接证明法。由定理1中的 (ii) 可知,当 m 和 n 是整数时有 a | mb 和 a | nc。再由定理1中的 (i) 可得a | mb + nc。

    定理2:除数算法(division algorithm)。令 a 为整数,d 为正整数。则存在唯一的整数 q 和 r,满足 0 ≤ r < d,使得a = dq + r。

          详细证明请参考《离散数学及其应用》5.2.5节-利用良序性证明

    欧几里得算法

    我们用gcd(a,b)表示a与b的最大公约数,lcm(a,b)表示a与b的最小公倍数。

    1.利用素因子分解求最大公约数和最小公倍数
    例:求 168 和 300 的最大公约数和最小公倍数
    解:对 168 和 300 做素因子分解:
    168 = 2 3 × 3 × 7 , 300 = 2 2 × 3 × 5 168 = 2^{3}\times 3\times 7, 300 = 2^{2}\times 3\times 5 168=23×3×7,300=22×3×5可把它们写成 168 = 2 3 × 3 1 × 5 0 × 7 1 , 300 = 2 2 × 3 1 × 5 2 × 7 0 168 = 2^{3}\times 3^{1}\times5^{0}\times 7^{1}, 300 = 2^{2}\times 3^{1}\times 5^{2}\times7^{0} 168=23×31×50×71,300=22×31×52×70于是 g c d ( 168 , 300 ) = 2 2 × 3 1 × 5 0 × 7 0 = 12 gcd(168,300) = 2^{2}\times 3^{1}\times5^{0}\times 7^{0} = 12 gcd(168,300)=22×31×50×70=12 l c m ( 168 , 300 ) = 2 3 × 3 1 × 5 2 × 7 1 = 4200 lcm(168,300) = 2^{3}\times 3^{1}\times5^{2}\times 7^{1} = 4200 lcm(168,300)=23×31×52×71=4200
    2.欧几里得算法又称辗转相除法求最大公约数
    直接从整数的素因子分解式计算两个整数的最大公约数效率很低,原因是寻找素因子分解式非常耗时,而欧几里得算法非常高效。
    欧几里得算法的基础是下面关于最大公约数和整除算法的结论。

    引理1:令a = bq + r,其中a,b,q 和 r均为整数,则 gcd(a,b) = gcd(b,r)

    :如果能证明 a 与 b 的公约数和 b 与 r 的公约数相同,也就证明了 gcd(a,b) = gcd(b,r),因为这两对整数必定有相同的最大公约数。
          因此,假定 d 整除 a 和 b,则可得 d 也整除 a - bq = r (根据推论1)。因此,a 和 b 的任何公约数也是 b 和 r 的公约数。
          类似地,假定 d 整除 b 和 r,则可得 d 也整除 bq + r = a。因此,b 和 r 的任何公约数也是 a 和 b 的公约数。
          因此,gdc(a,b) = gcd(b,r)。
          假定 a 和 b 为正整数,且 a ≥ b。令 r 0 = a r_{0}=a r0=a r 1 = b r_{1}=b r1=b。当连续应用整除算法时,可得
    r 0 = r 1 q 1 + r 2          0 ⩽ r 2 < r 1 r_{0}= r_{1}q_{1}+ r_{2} \, \, \, \, \, \, \, \, 0 \leqslant r_{2}< r_{1} r0=r1q1+r20r2<r1 r 1 = r 2 q 2 + r 3          0 ⩽ r 3 < r 2 r_{1}= r_{2}q_{2}+ r_{3} \, \, \, \, \, \, \, \, 0 \leqslant r_{3}< r_{2} r1=r2q2+r30r3<r2 ⋮ \vdots r n − 2 = r n − 1 q n − 1 + r n          0 ⩽ r n < r n − 1 r_{n-2}= r_{n-1}q_{n-1}+ r_{n} \, \, \, \, \, \, \, \, 0 \leqslant r_{n}< r_{n-1} rn2=rn1qn1+rn0rn<rn1 r n − 1 = r n q n          r_{n-1}= r_{n}q_{n} \, \, \, \, \, \, \, \, rn1=rnqn最终在这一连续相除序列中会出现余数为0,因为在余数序列 a = r 0 > r 1 > r 2 > ⋯ ⩾ 0 a = r_{0}> r_{1}> r_{2}> \cdots \geqslant 0 a=r0>r1>r2>0中至多包含a项,再者从引理1可知 g d c ( a , b ) = g c d ( r 0 , r 1 ) = g c d ( r 1 , r 2 ) = ⋯ = gcd ⁡ ( r n − 2 , r n − 1 ) gdc(a,b)=gcd(r_{0},r_{1})=gcd(r_{1},r_{2})= \cdots =\gcd(r_{n-2},r_{n-1}) gdc(a,b)=gcd(r0,r1)=gcd(r1,r2)==gcd(rn2,rn1) = g c d ( r n − 1 , r n ) = g c d ( r n , 0 ) = r n =gcd(r_{n-1},r_{n})=gcd(r_{n},0)=r_{n} =gcd(rn1,rn)=gcd(rn,0)=rn因此,最大公约数是除法序列中最后一个非零余数。
    例:用欧几里得算法寻找 414 和 662 的最大公约数。
    解:连续相除得: 662 = 414 ⋅ 1 + 248 662=414\cdot 1+248 662=4141+248 414 = 248 ⋅ 1 + 166 414=248\cdot 1+166 414=2481+166 248 = 166 ⋅ 1 + 82 248=166\cdot 1+82 248=1661+82 166 = 82 ⋅ 2 + 2 166=82\cdot 2+2 166=822+2 82 = 2 ⋅ 41 82=2\cdot 41 82=241因此, g c d ( 414 , 662 ) = 2 gcd(414,662)=2 gcd(414,662)=2,因为2是最后一个非零余数。

    算法和具体实现如下:

    算法 欧几里得算法
    procedure gcd(a,b:正整数)
    x := a
    y := b
    while y ≠ 0
    	r := x mod y
    	x := y
    	y := r
    return x{gcd(a,b)是x}
    
    欧几里得算法实现
    int gcd(int a, int b)
    {
    	int x = a;
    	int y = b;
    	int r;				// 余数
    	while (y != 0) {
    		r = x % y;
    		x = y;
    		y = r;
    	}
    	return x;
    }
    

    3.求最小公倍数
    除了运用1中的质因数分解法外,可以用公式法求两个数的最小公倍数。由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即 a × b = g c d ( a , b ) × l c m ( a , b ) a \times b = gcd(a,b)\times lcm(a,b) a×b=gcd(a,b)×lcm(a,b)。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。

    展开全文
  • #求最大公约数 def gcd(a,b): if a<b: t=a a=b b=t while a%b!=0: temp=a%b a=b b=temp return b a = int(input()) b = int(input()) r = gcd(a,b) print(r)
    #求最大公约数
    def gcd(a,b):
        if a<b:
            t=a
            a=b
            b=t
        while a%b!=0:
            temp=a%b
            a=b
            b=temp
        return b
    a = int(input())
    b = int(input())
    r = gcd(a,b)
    print(r)
    

    展开全文
  • 欧几里得算法又称辗转相除法,用于两数的最大公约数,计算公式为GCD(a,b)=GCD(b,a%b); 2.证明: 设x为两整数a,b(a>=b)的最大公约数,那么x|a,x|b; ①由整数除法具有传递性(若x能整除a,x能整除b,那么x可整除a,b...
  •   辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此...
  • int gcd(int a,int b){ if(a%b==0)return b; else return gcd(b,a%b); }
  • 欧几里得减法求最大公约数欧几里得减法求最大公约数
  • C语言欧几里得算法求最大公约数

    千次阅读 2020-06-05 18:01:45
    #include<stdio.h> int gcd(int a,int b); int main() ...printf(“最大公约数是%d”,gcd(a,b)); return 0; } int gcd(int a,int b) { int r; r=a%b; if(r==0) return b; else gcd(b,r); } ...
  • 课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
  • int gys(int a,int b)//最大公约数,递归 { if(a%b==0) return b; return gys(b,a%b); } int main(){//最小公倍数 int a,b; while(scanf("%d%d",&a,&b)!=EOF){ int t; if(a<b){//让a>...
  • 欧几里得求最大公约数/python

    千次阅读 2015-07-09 13:48:39
    这个个求最大公约数的函数,利用了欧几里得算法。 欧几里得法求最大公约数a和b的最大公约数 记 a mod b=c ,即a=kb+c  设a b的最大公约数为d,则a=m*d b=n*d,m和n互质。 c=a-kb=md-knd=(m-kn)d,m和n...
  • 欧几里得算法又称辗转相除法,用于两个正整数a,b的最大公约数 2.算法设计 1)如果a&lt;b,交换a,b的值 2)r=a mod b(即r是a÷b的余数),若 r = 0,算法结束,b即为答案 3)否则,互换:a ← b,b←r,并返回...
  • 欧几里得算法求最大公约数算法思想: p和q的最大公约数,如果q=0,最大公约数就是p;否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数。 java实现代码: 1 public class Demo0 { 2 public ...
  • 欧几里得算法,据说是辗转相除法...//求最大公约数——欧几里得算法;最小公倍数—— #include<iostream> using namespace std; int main() { int a,b,c,temp,A,B; while(cin>>a>>b) {...
  • #include using namespce std; int main() { int x,y; while(cin>>x>>y) { cout }  return 0; } int gcd(int x,int y) { while(x!=y) { if(x>y) { x-=y; } else { y=y-x; } } return x; }
  • python怎么求最大公约数和最小公倍数 一、求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10...
  • 欧几里得算法(Eculidean Algorithm)指明:a,b最大公约数(Greatest Common Divisor),就等于b,a%b的最大公约数,公式如下 gcd(a,b)=gcd(b,a%b)gcd(a,b) = gcd(b,a \% b)gcd(a,b)=gcd(b,a%b) 但实际上,不仅仅是最大...
  • 最大公因数,也称最大公约数最大公因子,指两个或多个整数共有约数中最大的一个,a,b的最大公约数记为(a,b)。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。常用的是辗转...
  • 欧几里得算法求最大公约数也叫辗转相除法。 证明 有两个数a,b,且a = kb + r(a,b,k,r皆为正整数,且r<b) 假设d为a,b的一个公约数 而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,m为整数 因此d也是r的...
  • int EA(int a,int b) // 欧几里得算法 { int remainder; int middle; if (a < b) // a,b交换值 { b = a + b; a = b - a; b -= a; }else if(a==b) { return a; } do { remainder = a % b;
  • 最大公因数,也称最大公约数最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数...
  • 要证明欧几里得算法原理,首先需要证明下面两个定理(其中a,b都是整数): 1 如果c可以整除a,同时c也可以整除b,那么c就可以整除au + bv(u,v是任意的整数)。 这个定理的证明很简单,$\frac{au + bv}{c} = u\frac{a}...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,008
精华内容 4,003
关键字:

欧几里得求最大公约数