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

时间:2022-08-23 16:11:04

关于欧几里得算法求最大公约数算法,

代码如下:

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也被d整除)

所以可知

a,b 的公约数和 b , a mod b  公约数一样,所以他们最大公约数也一样。

即就是 gcd ( a , b ) = gcd ( b , r )

当r=0时,b显然是(b,r)的最大公约数,也即就是a,b的最大公约数,

欧几里得算法求最大公约数(gcd)的更多相关文章

  1. 浅谈欧几里得算法求最大公约数(GCD)的原理及简单应用

    一.欧几里得算法及其证明 1.定义: 欧几里得算法又称辗转相除法,用于求两数的最大公约数,计算公式为GCD(a,b)=GCD(b,a%b): 2.证明: 设x为两整数a,b(a>=b)的最大公约 ...

  2. 欧几里得算法求最大公约数-《Algorithms Fourth Edition》第1章

    最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小公倍数,记为[a, b]. 在求最大公 ...

  3. 关于欧几里得算法求最大公约数,即OJ1029的参考解法

    #include <stdio.h> int main(int argc, char *argv[]) { int a,b,c; scanf("%d %d",& ...

  4. &lbrack;算法&rsqb;求满足要求的进制&lpar;辗转相除(欧几里得算法),求最大公约数gcd&rpar;

    题目 3在十进制下满足若各位和能被3整除,则该数能被3整除. 5在十六进制下也满足此规律. 给定数字k,求多少进制(1e18进制范围内)下能满足此规律,找出一个即可,无则输出-1. 题解 写写画画能找 ...

  5. 浅谈Stein算法求最大公约数&lpar;GCD&rpar;的原理及简单应用

    一.Stein算法过程及其简单证明 1.一般步骤: s1:当两数均为偶数时将其同时除以2至至少一数为奇数为止,记录除掉的所有公因数2的乘积k: s2:如果仍有一数为偶数,连续除以2直至该数为奇数为止: ...

  6. 欧几里得算法&colon;从证明等式gcd&lpar;m&comma; n&rpar; &equals; gcd&lpar;n&comma; m mod n&rpar;对每一对正整数m&comma; n都成立说开去

    写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...

  7. 分解质因数法求最大公约数&lpar;javascrip实现&rpar;

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 辗转相除法求最大公约数&lpar;gcd&rpar;的斐波那契数列&lpar;fib&rpar;最坏时间复杂度的证明

    下载地址:http://pan.baidu.com/s/1jIt6UlK

  9. gcd(欧几里得算法)与exgcd(扩展欧几里得算法)

    欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b)  =>  a=m*d,b=n ...

随机推荐

  1. SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递

    需求: 表 people_crowed_test 按view_num排序后,输出该表的记录前30%的aid, buyer_id; 需求场景下的诸多限制: 1) 不支持变量赋值,也就是无法把中间结果保存 ...

  2. Objective-C 中的类和对象

    http://blog.ibireme.com/2013/11/25/objc-object/ Objective-C的runtime是开源的,源码可以在苹果官网下载到:objc4. 在objc4-5 ...

  3. 选择排序的openMP实现

    // test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include < ...

  4. 常规页生命周期(class0620)

    常规页声明周期阶段 阶段                   说明 页请求 开始 页初始化 加载 验证 回发事件处理 卸载 生命周期事件 页事件               典型使用

  5. Android 布局优化 -- 学习笔记

    通过一些惯用.有效的布局原则,我们可以制作出加载效率高并且复用性高的UI.简单来说,在Android UI布局过程中,需要遵守的原则包括如下几点: 尽量多使用RelativeLayout,不要使用绝对 ...

  6. ANDROID&lowbar;MARS学习笔记&lowbar;S05&lowbar;004&lowbar;过滤杂质,得到真正的加速度

    一.简介 二.代码1.java (1)MainActivity.java import android.app.Activity; import android.content.Context; im ...

  7. 学习笔记——命令模式Command

    命令模式,将具体操作Receiver封在Command中,调用类只需要知道Command即可.

  8. Python字符集

    字符集: 美国:ASCII      需要8bit表示     英文字母一个字节,不支持中文中国:GBK                           英文字母一个字节,汉字占两个字节万国:un ...

  9. svg-edit和svg中的自定义属性

    用svg的码农们肯定知道,在path.rect等元数据中会加入一些自定义属性,保存于数据库,但是用svg-edit编辑器时, 读取的时候,无法读取些这些自定义属性.解决办法:找sanitize.js文 ...

  10. java面试题&colon;jvm

    jvm内存区域 Q:jvm内存怎么划分的? 答: 方法区(线程共享):各个线程共享的一个区域,用于存储虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然 Java 虚拟机规范把方法 ...