求最大公约数的欧几里得算法与其伪代码

最大公约数的欧几里得算法

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)
摘自
欧几里得算法(求解最大公约数的优质方法)以及原理拓展

用伪代码实现此算法

Begin
输入 A,B
A对B取余,结果赋值为R
若R=0,则B是最大公约数
若R不等于0,则以B为A,以R为B循环上一步

手动检测运算截图

原文地址:https://www.cnblogs.com/ruier/p/11794829.html

时间: 2024-11-08 23:54:03

求最大公约数的欧几里得算法与其伪代码的相关文章

数据结构--求最大公约数(欧几里得算法)

package com.itany.oulijide; public class Test { public static void main(String[] args) { int result=gcd(50,15); System.out.println(result); } //默认m>n,如果m<n,那么第一次迭代的时候会把两者交换 public static int gcd(int m,int n) { while(n!=0) { int rem=m%n; m=n; n=rem;

最大公约数(欧几里得算法)

public static long gcd(long m, long n) { while(n != 0) { long rem = m%n; m = n; n = rem; gcd(m,n); } return m; } 在一次迭代中余数并不按照一个常数因子递减,然而,我们可以证明,在两次迭代以后,余数最多是原始值的一半.这就证明了,迭代次数至多是2logN=O(logN)从而得到运行时间. 定理:如果M>N,则M mod N<M/2. 证明:如果N<= M/2,则由于余数小于N,固

最小公约数(欧几里得算法&amp;&amp;stein算法)

求最小公约数,最容易想到的是欧几里得算法,这个算法也是比较容易理解的,效率也是很不错的.也叫做辗转相除法. 对任意两个数a,b(a>b),d=gcd(a,b),如果b不为零,那么gcd(a,b)=gcd(b,a%b) 证明: 令 r=a%b,即存在k,使得 a=b*k+r,那么r=a-b*k:显然r>=0,  r%d=((a%d)-(b*k)%d)%d,因为a%d=b%d=0,所以r%d=0: 因此求gcd(a,b)可以转移到求gcd(b,a%b),那么这就是个递归过程了,那什么时候递归结束呢

欧几里得求最大公约数

问题:快速求取正整数a,b的最大公约数? 欧几里得算法(又称辗转相除法) 定理:gcd(a,b) = gcd(a,a mod b) 证明:对于任何正整数a,b.如果a>b,都有a=k*b+r  即r=a-k*b =>  r=a mod b. 假设d为a,b的公约数,则a=a1*d,b=b1*d. 而r=a1*d-k*b1*d=(a1-k*b1)*d  =>  d也是r的约数 => d也是(a,r)的公约数 则说明(a,b)的公约数也就是(a,r)的公约数.因此gcd(a,b)=gc

扩展欧几里得算法及实现

欧几里得算法,即辗转相除法,用于求整数a,b的最大公约数. 欧几里得算法C++实现代码:(无需确定 a,b 大小关系) long long gcd(long long a,long long b){     return b?gcd(b,a%b):a; } 扩展欧几里得算法:设a和b不全为0,则存在整数x和y,使得 gcd(a,b) = xa + yb 证明: 假设 a>b 当 b==0 时:gcd(a,b) = a , 此时 x=1 , y=0 当 ab!=0时: 设: x1a + y1b =

欧几里得算法求最大公约数(gcd)

关于欧几里得算法求最大公约数算法, 代码如下: int gcd( int a , int b ) { if( b == 0 ) return a ; else gcd( b , a % b ) ; } 证明: 对于a,b,有a = kb + r  (a , k , b , r 均为整数),其中r = a mod b . 令d为a和b的一个公约数,则d|a,d|b(即a.b都被d整除), 那么 r =a - kb ,两边同时除以d 得 r/d = a/d - kb/d = m (m为整数,因为r也

欧几里得算法——求取最小公约数

1 import java.util.Scanner; 2 3 /** 4 * Created by Administrator on 14-5-20. 5 */ 6 public class Euclid { 7 public static void main(String[] args){ 8 Scanner scanner=new Scanner(System.in); 9 String str=scanner.nextLine(); 10 int a=Integer.parseInt(s

欧几里得算法求最大公约数+最小公倍数

1,两个数互质:如果说两个数的公因数只有1,则可以说这两个数互质. 欧几里得算法求最大公约数: 首先求最大公约数,假设我们要求a和b的最大公约数 设a mod b = c: 可以得到一下的递推过程: a = kb + c ; 假设a , b 的最大公约数为d,则可以得到: a = md , b = nd; 可知m , n 互质: c = a - kb = md - knd = (m-kn)d; 我们已经知道m,n互质,则可以知道n和m-kn互质,则c和b的最大公约数也是d; 所以由以上的推论,我

算法怎么就这么难?----使用欧几里得算法求两数的最大公约数

本人菜鸟一枚,上午在看书的时候突然看到了求最大公约数的一个例题,突然就想到以前好像看过一个欧几里得算法,故又上网仔细找了一下欧几里得算法的原理.可能是本人时间长没看算法,脑子都生锈了. 看了几个讲解欧几里得算法的文章,大都只给公式,然后说了一大堆因为....在我还没看懂的时候,突然来了个所以...然后公式就这样推出来的.⊙﹏⊙b汗! 经过我这令人捉急的小脑袋转了半天,最后有了点眉目,所以拿出来和大家分享一下! 1.首先说一下:欧几里得算法是求两个数的最大公约数的,你可能会问:什么是最大公约数?