欧几里得

来看看一个常见的\(gcd\)代码

int Gcd(a,b){return (b==0)?a:Gcd(b,a%b);
}

入门的一个知识吧,但是你会证明吗?

\(emmm\) 好吧我就只是背背代码过来的

  • 证明:
    别想太多,我们只是要证\(gcd(a,b)=gcd(b,a\%b)\)而已啦
    设\(r=a\%b\)
    则\(a=kb+r\)其实\(k\)为常数
    设有实数\(d\)满足\(d|a,d|b\)
    \(a=kb+r \Rightarrow r=a-kb\)
    \(\therefore d|r\) \(d\)是\(b,r\)的公约数

扩展欧几里得

\(exgcd\)代码

int exgcd(int a,int b,int &x,int &y){if(b==0){x=1;y=0;return a;}int r=exgcd(b,a%b,x,y);int t=x;x=y;y=t-a/b*y;return r;
}

似乎背这个的更多(滑稽

  • 证明:
    必定存在整数对\((x,y)\)使得\(ax+by=gcd(a,b)\)
    \(ax_1+by_1=gcd(a,b)\)
    \(bx_2+(a\%b)y_2=gcd(b,a\%b)\)
    \(\therefore ax_1+by_1=bx_2+(a\%b)y_2\)
    \(\Rightarrow ax_1+by_1=bx_2+(a-(a/b)*b)y_2\)
    \(~~~~~~~~~~~~~~~~~~~=ay_2+bx_2-(a/b)*b*y_2\)
    根据恒等定理 \(x_1=y_2,y1=x_2-(a/b)y_2\)
    至此,我们得到了求解\((x1,y1)\)的方法
    由于\((x1,y1)\)的值基于\((x2,y2)\)
    欧几里得因为求\(gcd\)不断的递归求解一定会\(b=0\)所以递归可以结束
    只需要在原有欧几里得算法基础上稍微加一点代码就得出扩展欧几里得算法啦

应用

解不定方程\(ax+by=c\)
前置芝士

  • 1.\((a,b)\)的最小线性组合元素是\(gcd(a,b)\)
    证明:
    设s为\((a,b)\)的最小线性组合元素,\(a\%s\)也是\((a,b)\)的线性组合元素
    \(\because s为\)(a,b)\(的最小线性组合元素 \therefore a\%s=0,s|a\)
    同理\(s|b\),所也\(s\)为\(a,b\)的公约数
    \(\therefore gcd(a,b)|s \Rightarrow gcd(a,b)<=s\)
    由于基本事实 \(s>0\)且\(gcd(a,b)>=s\)
    得出推论:\((a,b)\)的最小线性组合元素是\(gcd(a,b)\)

  • 2.裴蜀定理:不定方程\(ax+by=c\) \(gcd(a,b)|c\)时有解
    证明:这还需要证明吗(逃 确实根据上面的随便想想就懂了

做法

  • 其实就是解\(ax+by=gcd(a,b)\)然后解乘上\(\dfrac{c}{gcd(a,b)}\)
    关于\(ax+by=gcd(a,b)\)的方程,对于一组解\((x_0,y_0)\)
    对应的一组关于原方程的解\((x_1=x_0*\dfrac{c}{gcd(a,b)},y_1=y_0*\dfrac{c}{gcd(a,b)})\)

  • \((x_1+b/gcd(a,b)*t,y_1-a/gcd(a,b)*t)\)其中t为任意整数,是不是有点难理解qwq,带进去就懂了:
    \[\begin{aligned}\\ a(x_1+b/gcd(a,b)*t)+b(y_1-a/gcd(a,b)*t))&=ax_1+ab/gcd(a,b)*t+by_1-ab/gcd(a,b)*t\\ &=ax_1+by_1\\ \end{aligned}\]

  • 通常我们会要求最小解,怎么办呢?
    显然\(b/gcd(a,b)\)是解集\(\{x\}\)的最小间隔
    设\(s\)为这个最小间隔
    则\(x\)的最小正整数解为\((x1\%s+s)\%s\)
    就不证明啦。。。自己理解一下吧,最小间隔都告诉你了,不就是加上或减去若干个\(s\)嘛

转载于:https://www.cnblogs.com/y2823774827y/p/10205821.html

欧几里得与扩展欧几里得总结相关推荐

  1. 欧几里得和扩展欧几里得

    别人总结的,很详细,http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 欧几里得算法,就是人们常说的辗转相除法,比较好理 ...

  2. 【笔记】 欧几里得(扩展欧几里得)

    欧几里得 本质:利用辗转相减法求最大公约数,即 gcd(a, b). 数学表达: 设 a > b ,则                          gcd(a, b) = gcd(a-b, ...

  3. 乘法逆元之欧几里得和扩展欧几里得

    乘法逆元 文章目录 乘法逆元 一.模运算的性质 二.除法的模运算 1.除法模运算 2.解决除法模运算问题 三.乘法逆元 1.定义 2.**逆元是干什么的呢** 四.求解逆元 1.费马小定理 2.扩展欧 ...

  4. 欧几里得、扩展欧几里得、同余

    一.同余: 1.若整数a和整数b除以正整数m的余数相等,则称a,b模m同余,记作a≡b(mod m). 2.费马小定理:若p是质数,则对于任意整数a,有ap ≡a(mod p). 3.欧拉定理:若正整 ...

  5. 欧几里得,扩展欧几里得,孙子定理

    欧几里得 这人是真的厉害! 辗转相除法 #include <iostream> #include <cstring> #include <algorithm>usi ...

  6. 数论读书笔记——欧几里得和扩展欧几里得

    欧几里得: 欧几里得算法: 定理1:整数a≥b>0,令r0=a,r1=b如果我们做带余除法得到rj=r(j+1)q(j+1)+r(j+2),且0<r(j+2)<r(j+1),j=0, ...

  7. 欧几里得 推 扩展欧几里得

    前言 本文讨论如何求下面方程的解(a,b已知): a x + b y = 1 ( x , y ∈ Z ) ax+by=1(x,y \in Z) ax+by=1(x,y∈Z) 首先,方程有没有可能无解? ...

  8. 数论 欧几里得与扩展欧几里得

    欧几里得算法: 求a,b的最大公约数 gcd(a,b)= gcd(b,a%b) ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b); } 扩展欧几里得算法: 如果a ...

  9. 欧几里得、扩展欧几里得和中国剩余定理

    欧几里得算法.扩展欧几里得算法和中国剩余定理 欧几里得算法 求两个数a, b的最大公约数 g c d ( a , b ) gcd(a, b) gcd(a,b) 根据 g c d ( a , b ) = ...

最新文章

  1. matlab中cumsum函数的使用
  2. 阿姨帮万勇:O2O产品的颠覆与布局,阿姨帮未来发展战略独家披露
  3. Windows10中Docker的安装与遇到的那些坑
  4. C语言中在常数后面加U、L、F的功能
  5. Oracle Solaris 11 Express发布了
  6. 软件工程 软件设计 步骤_好的软件设计特点 软件工程
  7. button的图文设置
  8. Apache 别名与重定向
  9. 京东动态页面爬虫 scrapy+selenium
  10. AcWing基础算法课Level-2 第四讲 数学知识
  11. div+css命名大全
  12. PHP九九乘法表代码
  13. 核定征收的个体户,年营业额不超过120万,还需要缴纳个税吗?
  14. 工控行业学什么编程语言比较好_中国工控|想学PLC编程?先弄清5种PLC专用语言 !...
  15. 本地连接服务器无响应怎么解决办法,本地连接的服务器未响应
  16. LSTM多输入时间序列预测之股价预测
  17. 存储结构和磁盘划分(基于RedHat7)
  18. 中文拼音的正则表达式
  19. python实例练习(12)身体质量指数BMI计算
  20. 笔记本电脑C盘满了清理方法大全

热门文章

  1. Lnmp上安装Yaf学习(二)
  2. logback 常用配置详解appender
  3. AndroidMVP
  4. Ext4.1 Grid 分页查询
  5. Asp.Net 构架(HttpModule 介绍) - Part.3
  6. 11.29 广州国际设计周
  7. java——获取一个应用程序运行的次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序
  8. 简单工厂模式、工厂方法模式与抽象工厂模式的区别(转)
  9. 【机器学习实践】Jupyter Notebook安装 侧边导航栏功能 操作及其他常用扩展功能介绍...
  10. supersocket新的配置属性 textEncoding