序:这篇博客我最开始学的时候写的,后来又学了一遍,自我感觉这篇好像有问题,扩展欧几里得建议走这边


首先先说,欧几里德一共有俩,欧几里德和扩展欧几里德,前者非常简单,后者直接变态(因为我太菜)

gcd = 最大公因数

普通欧几里德


先说普通的,就是辗转相除法求最大公因数,辗转相除就是基本数论,不讲了直接上代码

int gcd( int a,int b ){
if( b == 0 ) return a;
return gcd( b,a%b );
}

递归终止的边界就是a是b的倍数,也就是 a%b == 0

其中保证b一定是不大于a的,也就是说一直是b $\le$ a ,所以判断b是否为0就好了

扩展欧几里德


然后就到了一个变态的东西了

先引入一个东西,叫裴蜀定理

搞定了裴蜀定理,下面就能证了:

我们这里有两个数,a,b $\in$ N 且 a,b互质。

对于a,b来说,一定存在 x,y $\in$ N满足;

  ax + by = 1 = gcd( a,b )

已知gcd( a,b ) = gcd( b,a%b )

且因为a,b互质,则 gcd( b,a%b ) 的值一定也为 1,

插一句再往下走,避免看不懂:

1. 对于任意的两个数a,b $\in$ N (a $\ge$ b)必然满足:
    a = bx + r  (r $\le$ b)
  而其中,我们用 a%b 表示余数 r
  因为 r 也可以用 a - b$\lfloor \frac{a}{b} \rfloor$ 来表示   ( $\lfloor \frac{a}{b} \rfloor$ 表示x )
  即$\lfloor \frac{a}{b} \rfloor$ 和 a%b 都是表示 r ,故可以替换

2.   下文中的x',y'就是对于 bx' + (a%b)y' = gcd(b,a%b) = 1 中 x',y' 的解

所以也一定存在 bx' + ( a - b$\lfloor \frac{a}{b} \rfloor$ )y' = 1

即 bx' + ( a - b$\lfloor \frac{a}{b} \rfloor$ )y' = ax + by

再移一下项,可以得到 a( x-y ) b(  y-( x' - $\lfloor \frac{a}{b} \rfloor$ y' )  ) = 0 (想自己手推的同志们可以自己试一试)

最后可以得到x = y' 且 y = x' - $\lfloor \frac{a}{b} \rfloor$ y'

特殊的,当b = 0 的时候,(a,0) 对应的x = 1,y = 0

数论之欧几里德gcd的更多相关文章

  1. 【hdu 1576】A/B(数论--拓展欧几里德 求逆元 模版题)

    题意:给出 A%9973 和 B,求(A/B)%9973的值. 解法:拓展欧几里德求逆元.由于同余的性质只有在 * 和 + 的情况下一直成立,我们要把 /B 转化为 *B-1,也就是求逆元. 对于 B ...

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

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

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

  4. 数论---lcm和gcd

    cd即最大公约数,lcm即最小公倍数. 首先给出a×b=gcd×lcm 证明:令gcd(a,b)=k,a=xk,b=yk,则a×b=xykk,而lcm=xyk,所以ab=gcd*lcm. 所以求lcm ...

  5. 【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)

    题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧 ...

  6. 【poj 2115】C Looooops(数论--拓展欧几里德 求解同余方程 模版题)

    题意:有一个在k位无符号整数下的模型:for (variable = A; variable != B; variable += C)  statement; 问循环的次数,若"永不停息&q ...

  7. 数论只会GCD。。。

    一些关于GCD的代码.... #include <iostream> #include <cstdio> #include <cstring> using name ...

  8. 【数论】二进制GCD

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

  9. 邝斌带你飞之数论专题--Maximum GCD UVA - 11827

    Given the N integers, you have to find the maximum GCD (greatest common divisor) of every possible p ...

随机推荐

  1. 阿里云IoT流转到postgresql数据库方案

    之前写过一篇如使用阿里云上部署.NET 3.1自定义运行时的文章,吐槽一下,虽然现在已经2022年了,但是阿里云函数计算的支持依然停留在.NET Core 2.1,更新缓慢,由于程序解包大小的限制,也 ...

  2. 『现学现忘』Git对象 — 17、Commit对象

    目录 1.Commit对象介绍 2.Commit对象说明 3.本地库中对象之间的关系 4.总结 5.练习 6.本文用到的命令总结 1.Commit对象介绍 现在来介绍最后一种Git对象commit对象 ...

  3. Djang内置分页和自定义分页

    内置分页 views from django.core.paginator import Paginator,Page,PageNotAnInteger def DJs_pages(request): ...

  4. 团队Arpha5

    队名:观光队 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 完成服务器连接数据库部分代码 展示GitHub当日代码/文档签入记录 接下来的计划 服务器网络 ...

  5. 【面试普通人VS高手系列】说说缓存雪崩和缓存穿透的理解,以及如何避免?

    听说10个人去互联网公司面试,有9个人会被问到缓存雪崩和缓存穿透的问题. 听说,这9个人里面,至少有8个人回答得不完整. 而这8个人里面,全都是在网上找的各种面试资料去应付的,并没有真正理解. 当然, ...

  6. MySQL存储过程入门了解

    0.环境说明: mysql版本:5.7 1.使用说明 ​ 存储过程是数据库的一个重要的对象,可以封装SQL语句集,可以用来完成一些较复杂的业务逻辑,并且可以入参出参(类似于java中的方法的书写). ...

  7. 聊聊 HTTPS

    聊聊 HTTPS 本文写于 2021 年 6 月 30 日 最近工作也是越来越忙了,不像上学的时候,一天下来闲着没事可以写两篇博客. 今天来聊一下 HTTPS. HTTP HTTP 是不安全的协议. ...

  8. python 通过线上API查询ip归属地

    API为国外API,频率限制1分钟45个ip 脚本如下 1 #!/usr/bin/env python3 2 #-*-coding:utf-8-*- 3 4 import requests,re,js ...

  9. spring boot redis 写入异常

    redis 的 key value 使用 json 序列化.反序列化时,写入的 bean 不能是 final 类型的类,否则无法解析

  10. 跨域问题及其解决方法(JSONP&CORS)

    一.什么是跨域 当a.qq.com域名下的页⾯或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行为.跨域的定义从受限范围可以分为两种,⼴义跨域和狭义跨域. (一)广义跨域 ⼴义跨域通常包 ...