我恨数论

因为打这篇的时候以为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的更多相关文章

  1. 数论入门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 ...

  2. gcd, exgcd的证明

  3. Gcd&Exgcd算法学习小记

    Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...

  4. 简单数论总结1——gcd与lcm

    并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...

  5. gcd&&exgcd&&斐蜀定理

    gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...

  6. Gcd&Exgcd

    欧几里得算法: \[gcd(a,b)=gcd(b,a\bmod b)\] 证明: 显然(大雾) 扩展欧几里得及证明: 为解决一个形如 \[ax+by=c\] 的方程. 根据裴蜀定理,当且仅当 \[gc ...

  7. 【数论】二进制GCD

    二进制GCD     GCD这种通用的算法相信每个OLER都会 ,辗转相除,代码只有四行 : int GCD(int a,int b){ if(b==0) return a; return GCD(b ...

  8. 约数,gcd,exgcd.

    很多题都是要求出什么最大公约数或者最小公倍数什么的,也有一些题目是和约数个数有关的,所以需要总结一下. 首先最大公约数和最小公倍数怎么求呢? 当然是观察法了,对于一些很聪明的孩纸他们一般随便一看就秒出 ...

  9. 算法马拉松35 E 数论只会Gcd - 类欧几里得 - Stern-Brocot Tree - 莫比乌斯反演

    题目传送门 传送门 这个官方题解除了讲了个结论,感觉啥都没说,不知道是因为我太菜了,还是因为它真的啥都没说. 如果 $x \geqslant y$,显然 gcd(x, y) 只会被调用一次. 否则考虑 ...

随机推荐

  1. python字典的基本操作,以及可变数据类型和不可变数据类型的区分

    字典:采用键值对存储数据的数据类型,字典的键必须是不可变的数据类型 补充: 不可变(可哈希)数据类型:str,bool,int,tuple 可变(不可哈希)数据类型:list,  dict, set ...

  2. camtasia Studio 7 的使用

    最近领导给了个任务,要把我们的三维应用功能做个视频,好带出去宣传.通过搜索,发现大家都说camtasia Studio好用,很快在网上找到了,与大家分享链接: http://pan.baidu.com ...

  3. 深入浅出 Java Concurrency (10): 锁机制 part 5 闭锁 (CountDownLatch)[转]

    此小节介绍几个与锁有关的有用工具. 闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态.通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻 ...

  4. dubbo入门学习(二)-----dubbo hello world

    一.dubbo hello world入门示例 1.提出需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在需要创建两个服务模块进行测试: 模块 功能 订单服务web模块 创 ...

  5. jeecms 前台拦截器的研究与改造

    jeecms 前台拦截器的研究与改造 2013年12月24日 15:23:35 xinfei0803 阅读数 3511   jeecms出发点是面向大众的,具有前台开发性,也就是说,即时是未登录(游客 ...

  6. 微服务注册发现集群搭建—单机版(Registrator+Consul+Consul-template+nginx)

    1.创建模板文件 docker-compose.yml #backend web application, scale this with docker-compose scale web=3 web ...

  7. 一个网页登陆界面写30多个测试Case——测试之道

    转自博文:http://www.cnblogs.com/I-am-Betty/p/3566411.html 具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页 ...

  8. chrome屏蔽https广告

    “设置” -> “高级” -> 系统/“打开代理设置” -> “安全” -> “受限站点” -> “添加” 好了

  9. html文档加载顺序简单理解

    html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  10. A Simple Problem with Integers POJ - 3468 (线段树)

    思路:线段树,区间更新,区间查找 #include<iostream> #include<vector> #include<string> #include< ...