我恨数论

因为打这篇的时候以为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. Hibernate继承注解

    hibernate应用中,继承的用途或目的主要有两点: 组件化:故明思义,把重复性的代码抽取成组件,以便重用和维护.hibernate应用中,一些重复的字段,重复的映射配置,就需要抽取成组件. 多态性 ...

  2. CENTOS 7更换系统启动默认内核

    本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:CENTOS 7更换系统启动默认内核: 环境: CentOS Linux release 7.6.1810 (Core) : 1.查看当前 ...

  3. a标签实现 批量下载

    // 批量下载 download (name, href) { var a = document.createElement('a') var e = document.createEvent('Mo ...

  4. 洛谷P3300 城市规划

    题意:给你一个6 * n的网格题,单点修改,询问区间联通块数.n <= 10w 解:看起来就很显然的一道题......线段树每个点用一个ufs维护连通性.完了. 我为了方便思考把图转成横着的了. ...

  5. 前端(jQuery)(6)-- jQuery的扩展与noConflict

    1.jQuery的扩展 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  6. CentOS7 下的 firewall 用法

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  7. spring四种依赖注入方式(转)

    spring四种依赖注入方式!! 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提 ...

  8. redis 原生操作 & python操作redis

    一.基本介绍 1.简介 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  9. [jnhs]未完待续HttpServletRequest示例

    uri: /kaihu/showip.html method: GET QueryString: null Parameters: Headers: Name: host Value: localho ...

  10. Django与HTML业务基本结合--基本的用户名密码提交方法2

    from django.shortcuts import render # Create your views here. from django.shortcuts import render de ...