关于扩展欧几里得定理

众所周知,扩展欧几里得定理是用来求形如(a,b,c皆为整数)这样的方程的一组解[注,仅是一组解]的定理

它的原理比较复杂,本人学了挺久才懂了一点,这里就不谈了,扩欧的核心是它的思想,它的思想可以用来解决许多题

该方程有解的条件 :

要使(a,b,c皆为整数) 有解,我们设k=gcd(a,b),可以将原方程写成的形式

 即

   a,b,c均为整数

  一定是整数即一定是k的倍数

   k|c 即 gcd(a,b)|c          //  k|c数学里为  c%k=0

由此可见,该方程有解的条件为c%gcd(a,b)=0

求解方法 :

由于是求解的一组解,在方程有解的条件下,我们可以考虑先求出的一组解,

为什么这样考虑呢,这样子变化有什么好处呢?当我们将原方程转变为这样的方程之后,实际上我们求出的x与y并不是

原方程的解,我们可以理解为转变后的方程的解为x'与y',实际上该方程是将原方程除以

c/gcd(a,b)后所得到的,所以原方程的解为那么我们先求出

原方程的解便只需乘以c/gcd(a,b)就能得到了

另外说明,c=gcd(a,b)是原方程有解的最小情况,利用这个性质,裴蜀定理也就不难写出来了

那么该如何求解呢?

众所周知(又是这个词,词穷)   gcd的写法return b==0?a:gcd(b,a%b);(为了节约篇幅强行压缩)关键的一步就是

gcd(a,b)==gcd(b,a%b)了,这个的成立性就不证明了,我们求解是需要利用到gcd的这个特性的

我们可以得到这样一个方程(这里的%显示不出来就用mod代替了),然后我们将gcd(b,a%b)中的b和a代入原方程

那么可以得到gcd(b,a%b) = bx+(a%b)y,注意,此时的x与y也不是原方程的解,也可以理解为x',y'这样子我们就可以得到

(这里是将gcd(a,b)的a,b反代入原方程),又因为电脑中的取模运算a%b是等价于a-a/b*b的

所以我们又可以将最后一个方程变成bx'+(a-a/b*b)y',然后与第一个方程放在一起便有

,然后拆项移项,变成,最后便能得出这样的转移方程

,有了这样的转移方程,那么我们可以递归地写出代码了,递归结束条件就是b==0时,此时的方程

ax+by=gcd(a,b),b==0,所以就是ax=a,那么x=1,y=0

//已知a,b  求解  ax+by=1
void ex_gcd (int a,int b,int &x,int &y) { if (b==0){x=1,y=0;return;} ex_gcd(b,a%b,x,y); int tmp=x; x=y,y=tmp-a/b*y; } /* * 若求解 ax+by=c * △条件(是否有解) : 满足gcd(a,b)|c [c%gcd(a,b)==0] * 可以先求 ax+by=gcd(a,b) * 再将求得的x与y分别乘以c/gcd(a,b) */

那么扩展欧几里得便讲完了,下面说一下上文提到的裴蜀定理

原题链接

裴蜀定理

题目描述

给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小

输入输出格式

输入格式:

第一行给出数字N,代表有N个数 下面一行给出N个数

输出格式:

S的最小值

我们可以将A1X1+A2X2+...+AnXn看成许多个ax+by,那么我们要求的便是c的最小值,上文说过,c的最小值就是gcd(a,b),所以我们只需求出所有的gcd便可

附上代码

#include <cstdio>
#include <cmath> using namespace std; int ans,n,t; int gcd (int a,int b) { return !b?a:gcd(b,a%b); } int main () { scanf("%d",&n); scanf("%d",&ans);//ans初始赋值为第一个数 while (--n){ scanf("%d",&t); t=abs(t); ans=abs(gcd(ans,t)); } printf("%d",ans); return 0; }

注,如若有误或者哪里讲得不清楚,请联系本人更改或者在下方留言,谢谢啦~\(≧▽≦)/~

转载于:https://www.cnblogs.com/Morning-Glory/p/9784224.html

浅谈扩展欧几里得定理(附裴蜀定理)相关推荐

  1. 逆元的几种求法(扩展欧几里得,费马小定理或欧拉定理,特例,打表等)

    乘法逆元 对于缩系中的元素,每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n) 一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在 逆元的含义:模n意义下,1个数a如果 ...

  2. 数论基础(1)扩展欧几里得定理

    一.引言 扩欧在朴素欧几里得定理中扩展得到,主要用于解决什么问题? 1.求两个数的最大公约数(朴素欧也可以解决这个问题) 2.ax+by=gcd(a,b),求解这个线性不定方程的一组特解. (补充:贝 ...

  3. 裴蜀定理、拓展欧几里得及其证明

    定理 裴蜀定理(贝祖定理)是一个关于最大公约数的定理. 裴蜀定理说明了对任何整数a,b和它们的最大公约数d,关于未知数x和y的线性不定方程:若a,b是整数,且 g c d ( a , b ) = d ...

  4. 裴蜀定理详解+例题: BZOJ 1441 MIN

    在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理 在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理.裴蜀定理得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a.b和它们的最大公约 ...

  5. 密码学基础——辗转相除法,费马小定理,欧拉定理,裴蜀定理,中国剩余定理

    文章主要根据百度百科和维基百科相关相关知识点整理而成! 辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法.它的具体做法是:用较小数除较大数 ...

  6. bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理

    题目 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1< ...

  7. (裴蜀定理)ax + by = m 有解,当且仅当 m 是 gcd(a,b) 的倍数

    简介:在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理.裴蜀定理得名于法国数学家艾蒂安·裴蜀,说明了对任             何整数a.b和它们的最大公约数d,关于未知数x和y的线性丢 ...

  8. 浅谈 裴蜀定理扩展欧几里得

    裴蜀定理 a , b a,b a,b 是整数,且 gcd ⁡ ( a , b ) = d \gcd(a,b)=d gcd(a,b)=d,那么对于任意的整数 x , y x,y x,y, a x + b ...

  9. 逆元+费马小定理+扩展欧几里得

    逆元:(即是逆元素)逆元素是指一个可以取消另一给定元素运算的元素. 在一个代数系统(S,*)中,存在单位元素e,如果对S内的元素a存在a^-1 * a = e,则将 a^-1称为a 的左逆元. 同理若 ...

最新文章

  1. docker监控系统
  2. 交换机的VACL测试
  3. 火狐浏览器打印网页不全_武汉社保网上下载打印流程
  4. java合并list_怎么把两个list合并
  5. 微信支付—微信H5支付「PC端扫码支付」
  6. 20165302 学习基础和C语言基础调查
  7. Linux下替代grep高效文本搜索工具
  8. pc模式 华为mate30_很实用!华为Mate 30全系支持PC模式,无线充+投屏更方便!
  9. php找爸爸,暖哭!萌娃外滩找爸爸:“他两天没回家”
  10. 不对等的爱情并不长久
  11. 2020年第三季度的垃圾邮件和网络钓鱼攻击分析
  12. kafka安装部署和使用
  13. RK3288 NFS rootfs修改和操作(已验证)
  14. PHP检测字数,PHP获取word文档字数的问题
  15. TPS Motion(CVPR2022)视频生成论文解读
  16. python 利用random生成验证码与MD5码加密过程
  17. 获取拼音-pinyin.js
  18. 勇斗勒索软件的英雄疑因旧罪被捕;华为、腾讯为用户数据起冲突
  19. 霍尔电流传感器在UPS蓄电池浮充电流远程监测方案的应用
  20. android有用的命令

热门文章

  1. yaml文件编写格式
  2. 儿童写作业用的护眼灯哪种好?高显色值、无级调光的护眼台灯
  3. VML学习笔记(1)——基本概念
  4. 研究团队利用GAN预测未来长相
  5. Latex转换成word
  6. 信安小白,一篇博文讲明白数字证书和PKI(公钥基础设施)
  7. Java数组练习--数组随机赋值
  8. 机器学习(4):PCA主成分分析法实例
  9. 【springboot微服务】Lucence实现Mysql全文检索
  10. 动态规划总结三01背包问题