一、欧几里得算法(辗转相除法):
结论:gcd(a,b)=gcd(b,a%b)。
证明:假设a,b的最大公约数为r,a=k1r,b=k2r(k1>k2)。
则a%b=k1r-nk2r=(k1-nk2)r。下面要证k2和(k1-nk2)互质,利用反证法:假设k2=x1d,(k1-nk2)=x2d,则k1=x2d+nk2=x2d+nx1d。显然与k2,k1互质,与假设矛盾,证明k2和(k1-nk2)互质,原式得证。下面利用递归思想实现,递归的边界即为b==0,返回a。
代码如下:

int gcd(int a,int b){if(b==0)return a;else return (b,a%b);
}

二、拓展欧几里得算法
1、前置知识:裴蜀定理
结论:若a,b,x,y是整数,且gcd(a,b)=d,则ax,by,ax+by一定为d的倍数,且ax+by=gcd(a,b)一定有整数解。并且对于方程ax+by=z,d|z一定存在整数解否则无整数解。
2、拓展欧几里得算法是干什么的?
用来求形如ax+by=gcd(a,b)的一组解
3.算法
ax+by=gcd(a,b),若b==0,则gcd(a,b)=a,x=1。若b不等于0,则考虑gcd(a,b)=gcd(b,a%b)。ax+by=gcd(a,b)等价于去递归求解
bx+(a%b)y=gcd(b,a%b)。则bx+(a-[a/b]b)y=gcd(b,a%b)。
则bx+ay-b[a/b]y=gcd(b,a%b)。则ay+b*(x-[a/b]*y)=gcd(b,a%b)
所以一个解即为x=y,y=x-[a/b]*y。
4.代码

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

欧几里得算法和拓展欧几里得算法相关推荐

  1. 欧几里得算法和扩展欧几里得算法——杨子曰数学

    欧几里得算法和扩展欧几里得算法--杨子曰数学 超链接:数学合集 不说废话,咱们直接开始 欧几里得算法 一句话: g c d ( a , b ) = g c d ( b , a m o d b ) gc ...

  2. 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法

    图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...

  3. 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)

    一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...

  4. 欧几里得算法和扩展欧几里得算法详解

    欧几里得算法: int gcd(int x,int y){if(y) return gcd(y,x%y);return x; } 扩展欧几里得算法: 先说一个整体思路: 先求Ax+By=gcd(A,B ...

  5. 欧几里得算法和扩展欧几里得算法的简单例子

    欧几里得算法: #include <cstdio> #include <cstdlib>/* * 挑战...p113 */struct point{ //格点int x;int ...

  6. 【原创】更相减损术 stein算法 欧几里得算法 拓展欧几里得算法 扩展欧几里得算法 逆元的计算与筛法 解模线性方程

    欧几里得 说在前面 数论学复习 Part 6. 然后再来一章CRT和组合数,就飞往概率,以此为跳板去向DP. 计划很美啊你. P.S. 这么说来拉格朗日插值可以说是数论学复习的Part 0了啊. 有一 ...

  7. 扩展欧几里得算法求逆元c语言,关于扩展欧几里得算法和逆元

    关于扩展欧几里得算法和逆元 1.扩欧 a*x1+b*y1=gcd(a,b); b*x2+(a%b)*y2=gcd(b, (a%b))= gcd(a,b); a%b=a-(a/b)*b; 联立可得 x1 ...

  8. 【软件测试】使用边界值分析法和等价类划分法计算佣金

    [软件测试]使用边界值分析法和等价类划分法计算佣金 前言 1.边界值分析法 1.1 边界分析 1.1.1 设计测试用例 1.2 程序源码 2.等价类划分法 2.1 划分等价类 2.2 为有效等价类设计 ...

  9. C语言的双向链表头插法和尾插法,指定节点删除

    文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...

最新文章

  1. BERT是图像预训练未来?字节跳动iBOT刷新十几项SOTA,部分指标超MAE
  2. Word遇到问题需要关闭
  3. 【事故反演】配置过程(变位)
  4. android关机菜单修改,Android4.4关机菜单添加重启系列选项
  5. Vi编辑器的使用方法
  6. int转换为cstring_PostgreSQL 隐式类型转换探秘
  7. CCIE-LAB-SDN-第六篇-SDWAN-Branch2-vEdge-51-vEdge-52
  8. 打造工业级推荐系统(三):推荐系统的工程实现与架构优化
  9. 一个关于反序列化的小问题
  10. 软件设计师备考错题01
  11. 【个人笔记】OpenCV4 C++ 快速入门 13课
  12. Kotlin基础学习-入门篇
  13. 阻止事件冒泡 阻止浏览器的默认行为
  14. c语言中的内存4区域模型(堆,栈,全局区,代码区)
  15. diskpart clean 误操作恢复
  16. 纯html5的树形菜单,一个简单的js树形菜单
  17. 2022-清华管理学-清华大学-宁向东
  18. 高端风再起,小爱、小度、天猫精灵发新芽?
  19. JAVA-TOMCAT环境变量的设置方法
  20. 学习80亿个偏好模型才能了解地球上每个人的偏好

热门文章

  1. GeoMesa源码学习 (2):创建Schema并导入数据
  2. jQuery测试题及答案
  3. The Dimpled Manifold Model of Adversarial Examples in Machine Learning 文献阅读
  4. 实现策略路由、带宽管理,限制P2P,防止ARP病毒
  5. python虚拟环境virtualenvwrapper workon命令在sh文件中无法生效的解决方法
  6. 笔记笔记笔记笔记笔记笔记
  7. 【Word】【WPS】跨行显示表格标题/表头
  8. 搭建一个解析接口教程(自己的解析接口,可自定义广告)
  9. html图片遮住字了,css 内容为何被遮挡住了?
  10. 硅谷来信2,155,谁发明和缔造了facebook