专题·扩展欧几里得定理【including 求解二元一次方程,线性同余方程
初见安~这里是基础数论专题(3)~【详见数论专栏】
p.s:本文章假设你已经掌握了欧几里得算法——辗转相除法求最大公约数(gcd)
一、二元一次方程
形如的含有两个未知数且最高次数为1的方程我们称之为二元一次方程。
很显然,一般的二元一次方程的解都是有很多组的,并没有唯一解。
我们先不讨论其他的,尝试一下解方程的整数解:)
我们知道,在辗转相除法中,gcd(a,b)=gcd(b,a % b)。而取余的操作又可以写成:a - a / b * b(这里是整除),所以带入原式子可以得到:
再由此可得:
而x‘ 和y'在辗转相除法中都可以逆推回来,也就是说可以得到这么一个表格:
以99x + 78y = 6为例
a | b | a/b | x | y |
99 | 78 | 1 | -22 | 28 |
78 | 21 | 3 | 6 | -22 |
21 | 15 | 1 | -4 | 6 |
15 | 6 | 2 | 2 | -4 |
6 | 3 | 2 | 0 | 2 |
3 | 0 | NA | 2 | 0 |
左边两列由上往下通过辗转相除法推出,靠右两列从下往上通过刚才得出的公式推出,得到一组特解:x = -22, y = 28。
那么如何表示出所有的解呢?
很明显的,在特解(x0, y0)的基础上,其余均有(x0 + d1 * k, y0 + d2 * k)(k为整数)作为解成立。即
。再结合ax + by = c可得:
所以可以表示得到:
所以方程的解就可以表示为:
如上述例子中,x0 = -22,y0 = 28,则通解为:(-22 + 26k, 28 - 33k)(k为整数)。
如此解法,就是扩展欧几里得定理。
代码实现的话直接套用我们表格旁的公式,递归gcd后回溯时计算即可。【记得保存x'】
二、线性同余方程
形如,即且唯一未知数为一次的方程为线性同余方程。
x为同余方程a关于b模n的解。也就是说ax和b同余。x一定为整数。
那么线性同余方程如何求解呢?首先我们观察——,那么为我们可以通过取余的性质转化为这么一个二元一次方程来求解就行啦。
但是这里有一个问题——同余和二元一次方程还是有区别的,同余的话不一定有解。在欧几里得定理的基础上,我们可以求得的整数解,但是如果b并不是gcd(a,n)的倍数的话,求解出来的同余方程的解就是个分数了,也就是无解。
那么如果有解呢——因为同余方程有个取余的操作,也就是说x % d = x,(x + d)%d=x。所以如果有解,则恰好有gcd(a,n)个解。
求解同余方程的时候一定要注意一个问题——你求的ax + ny到底是b还是gcd(a, n),因为这涉及到一个到底是处理结果x还是处理a、n的问题,一定要小心。
代码的话就在扩欧的最后特判是否有解即可,具体操作具体到题目上。
关于求同余方程最小正整数解的问题,在逆元(传送门建设中)讲解后补充上~
迎评:)
——End——
专题·扩展欧几里得定理【including 求解二元一次方程,线性同余方程相关推荐
- 欧几里得定理与扩展欧几里得定理
欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...
- 数学基础知识(扩展欧几里得定理)
一.欧几里得定理(辗转相除法) 性质:如果 i 能整除a,也能整除b,则 i 能整除a+b,也能整除ax+by(x,y为整数),同时a mod b = a-(a/b)*b 用以上的性质我们知道如果一个 ...
- 扩展欧几里得定理求ax + by = c 的通解
扩展欧几里得定理求ax + by = c 的通解: 前置条件: ax + by = c , gcd(a, b) = d 计算: a d \frac{a}{d} dax + b d \frac{b}{ ...
- 扩展欧几里得定理详解和运用(就不信你看不懂!)
1 :扩展欧几里得内容: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+by =c.(若 c%gcd(a,b)!=0)则无解 所以 我们求ax+by=c是不是可以转化为求 ax+by=k ...
- 扩展欧几里得定理的证明和代码
1.欧几里得算法,gcd(a,b)为a b(a>b)的最大公约数,则gcd(a,b) = acd(b, a%b) 利用这个定理我们可以反复对ab模下去求得a和b的最大公约数 代码如下 int G ...
- 浅谈扩展欧几里得定理(附裴蜀定理)
关于扩展欧几里得定理 众所周知,扩展欧几里得定理是用来求形如(a,b,c皆为整数)这样的方程的一组解[注,仅是一组解]的定理 它的原理比较复杂,本人学了挺久才懂了一点,这里就不谈了,扩欧的核心是它的思 ...
- 扩展欧几里得定理 新手向证明及代码
知识储备 1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % b) 2 . 负数取模:忽略符号返回绝对值就好了 3 . 模数原理:对于整数a,b必然存在整数k使得a % b == a ...
- 数论基础(1)扩展欧几里得定理
一.引言 扩欧在朴素欧几里得定理中扩展得到,主要用于解决什么问题? 1.求两个数的最大公约数(朴素欧也可以解决这个问题) 2.ax+by=gcd(a,b),求解这个线性不定方程的一组特解. (补充:贝 ...
- 对扩展欧几里得定理理解+证明
原文出处: https://blog.csdn.net/Floatiy/article/details/80452643 知识储备 1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % ...
最新文章
- Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
- 玩嗨的2亿快手“老铁”和幕后的极致视觉算法
- 解决MathType与Word 2016兼容性问题。
- mxnet参数初始化,查看
- 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )
- php单屏网站源码,关于原生js实现类似fullpage的单页/全屏滚动的方法
- 深入理解分布式技术 - 负载均衡实现之一致性哈希算法
- Oracle入门(十二G1)修改序列(Sequence)起始值的方法
- 58到家运维专家杨经营:业务上云后运维平台的演进之路
- Delphi 开发 ERP [1] 准备
- Jupyter Tool
- 图文教程使用一套键鼠控制两台电脑
- LM393 电压比较器及其典型电路介绍
- 9款最好用的Bilibili影片下载线上工具推荐
- 24小时 java_Java获取24小时制的时间方法
- 微信小程序 实现拨打电话
- eclipse 不自动弹出提示(alt+/快捷键失效) 快捷键
- 干货|一文看懂什么是“非标资产”
- 在哪下载短视频?有哪些网站可以避免侵权?
- lgo软件许可号许可码_软件是许可的还是出售的?