1.欧几里德算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

定理:gcd(a,b) = gcd(b,a mod 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)的公约数是一样的,其最大公约数也必然相等

int gcd(int n,int m){if(m==0)  return n;return gcd(m,n%m);
}

或写成迭代形式

int gcd(int n,int m){while(m!=0){int t=m;m=n%m;n=t;}return n;
}

也或者是

int gcd(int n,int m)
{while(n!=m){if(n>m)    n=n-m;else m=m-n;}return n;
}

2.扩展欧几里德

扩展欧几里德算法是用来在已知a, b求解一组p,q使得p * a+q  * b = Gcd(a, b)  (解一定存在,根据数论中的相关定理),扩展欧几里德常用在求解模线性方程及方程组中。

int exGcd(int a, int b, int &x, int &y)
{if(b == 0){x = 1;y = 0;return a;}int r = exGcd(b, a % b, x, y);int t = x;x = y;y = t - a / b * y;return r;
}

把这个实现和Gcd的递归实现相比,发现多了下面的x,y赋值过程,这就是扩展欧几里德算法的精髓。
可以这样思考:
对于a' = b, b' = a % b 而言,我们求得 x, y使得 a'x + b'y = Gcd(a', b')
由于b' = a % b = a - a / b * b (注:这里的/是程序设计语言中的除法)
那么可以得到:
a'x + b'y = Gcd(a', b')  ===>
bx + (a - a / b * b)y = Gcd(a', b') = Gcd(a, b)  ===>
ay +b(x - a / b*y) = Gcd(a, b)
因此对于a和b而言,他们的相对应的p,q分别是 y和(x-a/b*y)

欧几里德和扩展欧几里德算法相关推荐

  1. 欧几里德与扩展欧几里德算法——密码学笔记(五)

    一.欧几里德算法 又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a% ...

  2. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

  3. 欧几里德与拓展欧几里德定理

    一.欧几里德定理 欧几里德定理就是辗转相除法的原理,用来求两个整数的最大公约数gcd(a, b). 推理过程: 辗转相除法是由辗转相减法而来的,如果a和b(假设a>b)的最大公约数是k,那么可以 ...

  4. poj 2115 C Looooops(扩展欧几里德算法)

    题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束. 比如:当k=4时,存储的数 i 在0-15之间循环.(本题默认为无符号) 若在有限次内结束,则输出 ...

  5. 欧几里德算法与扩展欧几里德算法

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...

  6. Bailian2793 孙子问题【扩展欧几里德算法+中国剩余定理】

    2793:孙子问题 总时间限制: 15000ms 内存限制: 65536kB 描述 我国古代<孙子算经>中,记有如下算题:"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩 ...

  7. 欧几里德算法 扩展欧几里德算法 求解丢番图方程

    欧几里德算法 即辗转相除法,计算整数A, B最大公约数. 基本算法:设 a = kb + r,其中a,b,k,r都是整数,则 gcd(a,b) = gcd(b,r),即 gcd(a,b) = gcd( ...

  8. 扩展欧几里德算法解决问题A:Jugs

    Jugs codeup的Jugs题目需要使用扩展欧几里德算法解决: Zoj的jugs题目需要使用BFS算法解决: codeup的Jugs题目需要使用扩展欧几里德算法解决: 题目链接:http://co ...

  9. 青蛙的约会(POJ 1061 扩展欧几里德算法)

    POJ 1061 青蛙的约会 扩展欧几里德算法简单介绍及应用 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳, ...

最新文章

  1. tomcat部署下的web项目网页更改不能自动刷新
  2. git如何回退到之前版本
  3. 两个向量组的秩相等说明什么_解析几何初步:向量与坐标(一)
  4. LoadRunner
  5. 【C++面向对象】类的数据成员:绑定、布局和存取
  6. 29.Linux/Unix 系统编程手册(上) -- 线程:介绍
  7. 阿里云丁宇:阿里巴巴15年云原生实践
  8. PID算法C语言实现
  9. 前端中常用的PS操作
  10. html中放大镜案列,HTML放大镜的一种实现及原理讲解(js)
  11. 不能显示隐藏文件或文件夹的完整解决方案
  12. MySQL数据库的高级SQL语句
  13. Java小写金额转换大写与金额比对(支持繁体大写金额)
  14. matlab bsxfun memory,matlab函数bsxfun浅谈(转载)
  15. 来自作业本的写给90后
  16. Leetcode-D35-数组-455. 分发饼干
  17. input 在ios环境下,input选中出现灰色背景
  18. 用计算机说唱的 那个男的是谁,中国十大嘻哈歌手排名:有名的rapper都有谁
  19. 解析、处理 URL 的特殊参数 ,转码
  20. 双线性插值及Matlab实现

热门文章

  1. 微信小程序开发之小程序框架表单
  2. 拼多多非标品类目怎么布局?拼多多标品类目怎么布局?
  3. 帮助加盟商管理客户靠谱吗?
  4. Arduino开发板使用红外遥控发射器和接收器的初学指南
  5. Java基础(网络编程基础)
  6. 内部温度传感器和光敏传感器实验
  7. 青龙面板+Ninja
  8. iPhone UITableViewCell 表格单元格类型
  9. 简单的excel表格格式整理
  10. 电脑重装系统前怎么备份,重装系统怎么备份数据