学术:浅谈欧几里得算法
欧几里得算法
又叫辗转相除法,是求解
这个算法有着美妙的几何理解:在长方形中每次选取宽作正方形并切去,如果一边已被切完而另一边仍有余长,长度就是余数。
扩展欧几里得算法
名为扩展,必有相同。这由来于一个美妙的等式:
下面让我们具体看看它的一个应用:解二元一次不定方程。
对于形如
的不定方程,我们可以垫一步,找到
我们能这么干,有两点原因:
- 根据裴蜀定理,这个不定方程一定有整数解,是一个可行的转化;
- 我们认为
是这个方程的一个基本情况,展示如下:
对于这个式子,我们可以构造出一个
这时,由于
我们就想通过迭代的方式,求解
由于是不定方程,只要我们找到了一组特解,我们就可以通过方程中系数的关系,推导出通解的式子,所以我们就要找到上面方程的一个特解,而这个是显然的,只要对应系数下相等就一定满足:
所以就可以开始递归求解子问题
代码:
1 | inline pair<LL, LL> exgcd(LL n, LL m) { |
随后基于
- 由之前推导的,
可以直接判掉无解的情况; ,在 同乘 ,得到: - 由此,对应相同系数项相等,可以得到一组特解:
- 我们为了得到一般解,就需要在不改变等式关系的情况下加入偏移量
: - 这个形式并不直接,因为含有
。我们希望得到仅仅和 有关系的式子,这需要把 展开并且通分: - 现在它的形态就是我们想看到的了,我们通过循环,每次同步增加减少绿色部分,调节到合理的区间,比如正整数解,最小正整数解,等等。
注意,以上推导一定要熟悉。当学习的东西越来越多,背诵记忆就是不可能的,我们要理解整个过程,并且能够在极短时间内就正确推导出来,达到正确、可行而且不影响考试时间复杂度的效果。
扩展欧几里得算法的应用
一般的,我们把问题转化为一个不定方程的形式,并且想要得到一个范围内的解,我们可以考虑使用扩展欧几里得算法。
求逆元
注意到
求解的逆元也就是
两点注意:
- 逆元仅在
互质的时候存在意义,这个也就是 使用的限制范围了,比费马小定理更加广泛; - 该方法求出来的逆元可能是负数(毕竟解方程的时候抛弃了所有的实际意义),所以求出来之后需要加上模数再取模;
- Title: 学术:浅谈欧几里得算法
- Author: Firsry
- Created at : 2025-08-23 20:49:45
- Updated at : 2025-08-23 20:51:09
- Link: https://firsryfan.github.io/2025/08/23/学术:浅谈欧几里得算法/
- License: This work is licensed under CC BY-NC-SA 4.0.