欧几里得算法和拓展欧几里得算法
一、欧几里得算法(辗转相除法):
结论: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;
}
欧几里得算法和拓展欧几里得算法相关推荐
- 欧几里得算法和扩展欧几里得算法——杨子曰数学
欧几里得算法和扩展欧几里得算法--杨子曰数学 超链接:数学合集 不说废话,咱们直接开始 欧几里得算法 一句话: g c d ( a , b ) = g c d ( b , a m o d b ) gc ...
- 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法
图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...
- 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)
一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...
- 欧几里得算法和扩展欧几里得算法详解
欧几里得算法: int gcd(int x,int y){if(y) return gcd(y,x%y);return x; } 扩展欧几里得算法: 先说一个整体思路: 先求Ax+By=gcd(A,B ...
- 欧几里得算法和扩展欧几里得算法的简单例子
欧几里得算法: #include <cstdio> #include <cstdlib>/* * 挑战...p113 */struct point{ //格点int x;int ...
- 【原创】更相减损术 stein算法 欧几里得算法 拓展欧几里得算法 扩展欧几里得算法 逆元的计算与筛法 解模线性方程
欧几里得 说在前面 数论学复习 Part 6. 然后再来一章CRT和组合数,就飞往概率,以此为跳板去向DP. 计划很美啊你. P.S. 这么说来拉格朗日插值可以说是数论学复习的Part 0了啊. 有一 ...
- 扩展欧几里得算法求逆元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 ...
- 【软件测试】使用边界值分析法和等价类划分法计算佣金
[软件测试]使用边界值分析法和等价类划分法计算佣金 前言 1.边界值分析法 1.1 边界分析 1.1.1 设计测试用例 1.2 程序源码 2.等价类划分法 2.1 划分等价类 2.2 为有效等价类设计 ...
- C语言的双向链表头插法和尾插法,指定节点删除
文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...
最新文章
- BERT是图像预训练未来?字节跳动iBOT刷新十几项SOTA,部分指标超MAE
- Word遇到问题需要关闭
- 【事故反演】配置过程(变位)
- android关机菜单修改,Android4.4关机菜单添加重启系列选项
- Vi编辑器的使用方法
- int转换为cstring_PostgreSQL 隐式类型转换探秘
- CCIE-LAB-SDN-第六篇-SDWAN-Branch2-vEdge-51-vEdge-52
- 打造工业级推荐系统(三):推荐系统的工程实现与架构优化
- 一个关于反序列化的小问题
- 软件设计师备考错题01
- 【个人笔记】OpenCV4 C++ 快速入门 13课
- Kotlin基础学习-入门篇
- 阻止事件冒泡 阻止浏览器的默认行为
- c语言中的内存4区域模型(堆,栈,全局区,代码区)
- diskpart clean 误操作恢复
- 纯html5的树形菜单,一个简单的js树形菜单
- 2022-清华管理学-清华大学-宁向东
- 高端风再起,小爱、小度、天猫精灵发新芽?
- JAVA-TOMCAT环境变量的设置方法
- 学习80亿个偏好模型才能了解地球上每个人的偏好
热门文章
- GeoMesa源码学习 (2):创建Schema并导入数据
- jQuery测试题及答案
- The Dimpled Manifold Model of Adversarial Examples in Machine Learning 文献阅读
- 实现策略路由、带宽管理,限制P2P,防止ARP病毒
- python虚拟环境virtualenvwrapper workon命令在sh文件中无法生效的解决方法
- 笔记笔记笔记笔记笔记笔记
- 【Word】【WPS】跨行显示表格标题/表头
- 搭建一个解析接口教程(自己的解析接口,可自定义广告)
- html图片遮住字了,css 内容为何被遮挡住了?
- 硅谷来信2,155,谁发明和缔造了facebook