【数论】如何证明gcd/exgcd
我恨数论
因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数
咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)?
首先,设
p = a/b,c = a mod b
则a = p*b + c
m = gcd(a,b),n = gcd(b,c)
因为m = gcd(a,b),所以 a | m 且 b | m
因为 b | m
所以 b * p | m // a|b,则a*k|b (k为整数)
因为a | m
所以a - b * p | m // a|b,则k*b - a | b (k为整数)
因为 a = p*b + c
所以 c = a - p*b
所以 c | m
因为c | m,且b | m
所以m为 c,b的公约数
因为n为 c,b的最大公约数
所以m <= n
因为n = gcd(b,c)
所以 b | n , c | n
因为 b | n
所以 b * p | n
因为 c | n
所以 b * p + c | n
因为 a = b * p + c
所以a | n
因为a | n,且 b | n
则n为a,b的公约数
因为m为a,b的最大公约数
所以 n <= m
因为m <= n
所以m = n
所以gcd(a,b) = gcd(b,c)
所以gcd(a,b) = gcd(b,a%b)
整体思路是:
先设出一个关系,然后通过关系证明它们的另一个关系
从gcd(a,b)转换得到b,c是公约数关系,
从gcd(b,c)转换得到a,b是公约数关系,
分别得到它们的大小关系,最后求公共解集,得到两个gcd相等
然后把c带上去,得到我们要证的式子
证完了gcd,下面可以证exgcd
exgcd 可以求
ax + by = gcd(a,b) 中的x,y
那么,我们设
ax1 + by1 = gcd(a,b)
由gcd得出
ax1 + by1 = gcd(b,a mod b)
设bx2 + a mod b y2 = gcd(b,a mod b)
下面用x2开始化简:
gcd(b, a mod b) = b * x2 + a mod b *y2
gcd(b, a mod b) = b * x2 + (a - floor(a/b) * b) * y2
gcd(b, a mod b) = b * x2 + a * y2 - floor(a/b) * b * y2
gcd(b, a mod b) = a * y2 + b * x2 - floor(a/b) * b * y2
gcd(b, a mod b) = a * y2 + b * (x2 - floor(a/b) * y2)
所以
ax1 + by1 = gcd(b, a mod b) = bx2 + a mod b y2 = a * y2 + b * (x2 - floor(a/b) * y2)
所以第一个式子与最后一个式子等量代换得到
x1 = y2
y1 = x2 - floor(a/b) * y2
然后可以通过以上等价式子写出递归,得到x1、y1。
【数论】如何证明gcd/exgcd的更多相关文章
- 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho
数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...
- gcd, exgcd的证明
- Gcd&Exgcd算法学习小记
Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...
- 简单数论总结1——gcd与lcm
并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...
- gcd&&exgcd&&斐蜀定理
gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...
- Gcd&Exgcd
欧几里得算法: \[gcd(a,b)=gcd(b,a\bmod b)\] 证明: 显然(大雾) 扩展欧几里得及证明: 为解决一个形如 \[ax+by=c\] 的方程. 根据裴蜀定理,当且仅当 \[gc ...
- 【数论】二进制GCD
二进制GCD GCD这种通用的算法相信每个OLER都会 ,辗转相除,代码只有四行 : int GCD(int a,int b){ if(b==0) return a; return GCD(b ...
- 约数,gcd,exgcd.
很多题都是要求出什么最大公约数或者最小公倍数什么的,也有一些题目是和约数个数有关的,所以需要总结一下. 首先最大公约数和最小公倍数怎么求呢? 当然是观察法了,对于一些很聪明的孩纸他们一般随便一看就秒出 ...
- 算法马拉松35 E 数论只会Gcd - 类欧几里得 - Stern-Brocot Tree - 莫比乌斯反演
题目传送门 传送门 这个官方题解除了讲了个结论,感觉啥都没说,不知道是因为我太菜了,还是因为它真的啥都没说. 如果 $x \geqslant y$,显然 gcd(x, y) 只会被调用一次. 否则考虑 ...
随机推荐
- 1008-Redo
关于flag,都立下了 T1 考试的时候就觉得是贪心,但是不会反悔emm…… 于是正解就是一个堆优化可反悔的贪心=.= 每次找前面最小的,于是是小根堆. 我们在交易的时候发现后面的一个可以更优. 于是 ...
- cgroups实验
# yum install -y libcgroup libcgroup-tools创建控制组cgcreate -g cpu:/testcgcreate -g cpu:/test2 禁用quotacg ...
- mysql大数据表优化
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- Python学习之函数(多层函数)、re模块的正则匹配--计算复杂加减乘除
头疼,其实这个程序在我看的视频当中是当做re模块的运用来进行测试的,而到了我这里就成了简化版的了,因为我实在是做吐了,恕小弟无能,只能做简化版的.为何说是简化版呢,因为要求是给的计算式是多层嵌套的小括 ...
- 安装springsource-tool-suite插件成功之后找不到spring的处理办法
最近学习spring,安装springsource-tool-suite插件,成功之后,在help-installation details里面可以找到安装的spring插件,却在window-pre ...
- java随机生成字符串工具类
package aA; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** * 字符随机 ...
- Leetcode476.Number Complement数字的补数
给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 示例 1: 输入: 5 输出: 2 解释: 5的二 ...
- 前端(jQuery)(9)-- jQuery菜单
1.垂直菜单布局 2.垂直菜单实现 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- MySQL加快批量更新 UPDATE优化
如果是更新为同样的内容,没啥难度,直接在where里面下功夫就好了,大家都懂,我要说的是针对更新内容不一样的情况 首先,先看看网上转载的方法: mysql 批量更新如果一条条去更新效率是相当的慢, 循 ...
- message d:\WEB_APP_QuChongFu\file\五月.xlsx (文件名、目录名或卷标语法不正确。)
原因是 文件名或文件夹名中不能出现以下字符:\ / : * ? " < > | 但是后台读取到的附件的文件路径就是这样的 网上大佬说了,这样处理 rep ...