数论入门——斐蜀定理与拓展欧几里得算法
斐蜀定理
内容
斐蜀定理又叫贝祖定理,它的内容是这样的:
若$a,bin N$,那么对于任意x,y,方程$ax+by=gcd(a,b)*k(kin N)$一定有解,且一定有一组解使$ax+by=gcd(a,b)$
推论
a,b互素的充要条件是方程$ax+by=1$有整数解。
证明
令$d=gcd(a,b)$,则$d|a,d|b$
那么就能得到$d|(ax+by)$
于是我们设s为$ax+by$能得到的最小正整数值,则$d|s$。
令$q=adiv s$(此处为整除),$r=amod s$,则$a=qs+r$。
->$r=a-qs$
->$r=a-q(ax+by)$
->$r=(1-qx)a+b(-qy)$
则通过观察可以发现r也是一个关于a,b的线性组合,其中$x=(1-qx),y=(-qy)$
因为$0leq r< s$,又因为s是a,b线性组合所能得到的最小自然数,那么r既然比s小,r只能等于0.
所以既然余数为0就说明$s|a$,同理可证明$s|b$,所以能得到$s|(ax+by)$。
于是就有$s|d$,又因为上文提到了$d|s$,所以得到$s==d$
由于s是$ax+by$所得到任意值的集合中的最小者,又因为s=d,d=gcd(a,b)所以得到
$ax+by=gcd(a,b)$
证明完毕
拓展欧几里得算法
内容
所谓拓展欧几里得算法,那一定是跟欧几里得算法有一定关系的,拓展欧几里得算法所研究的问题是,讨论如何求满足斐蜀定理的一组方程的解。
方法
下面直接给出代码
1 |
///解整数方程:ax+by=gcd(a,b); |
证明
假设a>b:
Ⅰ.当b=0时,gcd(a,b)=a,于是方程就变成了$ax=gcd(a,b)=a$,易知x=1,那么当x=1,y=0,时就得到了方程的一组解。
Ⅱ.设两方程:
$ax_1+by_1=gcd(a,b)$
$bx_2+(amod b)y_x=gcd(b,amod b)$
有欧几里得算法得$gcd(a,b)=gcd(b,amod b)$ 于是得到:
$ax_1+by_1=bx_2+(amod b)y_2$.
其中$amod b=a-adiv btimes b$(此处为整除),带入原式得到:
$ax_1+by_1=bx_2+ay_2-adiv btimes y_2times b$
通过移项得到:
$ax_1+by_1=ay_2+b(x_2-adiv btimes y_2)$
则可以得到:
$x_1=y_2,y_1=(x_2-adiv btimes y_2)$
于是就得到了x,y的递推关系,求接的过程是递归的,从最后一个解$x=1,y=0$,就能推导到第一个式子的一个解。证毕。
参考链接
数论入门——斐蜀定理与拓展欧几里得算法的更多相关文章
- ACM数论-欧几里得与拓展欧几里得算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...
- gcd&&exgcd&&斐蜀定理
gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...
- POJ 1061 青蛙的约会(拓展欧几里得算法求解模线性方程组详解)
题目链接: BZOJ: https://www.lydsy.com/JudgeOnline/problem.php?id=1477 POJ: https://cn.vjudge.net/problem ...
- POJ 1601 拓展欧几里得算法
学习链接:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 先来学习一下什么是欧几里得算法: 欧几里得原理是:两个整数 ...
- 欧几里得算法(gcd) 裴蜀定理 拓展欧几里得算法(exgcd)
欧几里得算法 又称辗转相除法 迭代求两数 gcd 的做法 由 (a,b) = (a,ka+b) 的性质:gcd(a,b) = gcd(b,a mod b) int gcd(int a,int b){ ...
- BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】
2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1326 Solved: 815[Submit][Stat ...
- 欧几里得 & 拓展欧几里得算法 解说 (Euclid & Extend- Euclid Algorithm)
欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法.用于计算两个正整数a.b的最大公约数. -- ...
- hdu 1576 A/B 拓展欧几里得算法
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- lame定理求欧几里得算法的求余和赋值次数
根据lame定理,根据欧几里得算法求(a,b)的最大公因数过程如下(假设a>b):
随机推荐
- stegsolve使用方法
Stegsolve使用方法(是因为ctf题总是遇到并且目前百度没有十分详细的探究说明) 这个没什么好说的,打开文件 ,保存,退出 在分析里面从上到下的依次意思是 File Format:文件格式 Da ...
- Vue.js(15)之 json-server搭建模拟的API服务器
json-server搭建模拟的API服务器 运行命令 npm install json-server -D 全局安装 json-server 项目根目录下创建 mock 文件夹 mock 文件夹下添 ...
- 实验吧web-易-what a fuck!这是什么鬼东西?
打开链接是一大串符号,是js编码的一种,全部复制下来,粘贴在控制台中回车就拿到flag了.
- 吴裕雄--天生自然MySQL学习笔记:MySQL UPDATE 更新
如果需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table ...
- SQL基础教程(第2版)第5章 复杂查询:5-3 关联子查询
第5章 复杂查询:5-3 关联子查询 ● 关联子查询会在细分的组内进行比较时使用.● 关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分.● 关联子查询的结合条件如果未出现在子查询之中就 ...
- JDBC<android studio,kotlin>
工具:mysql 5.6.19,mysql-connector-java-5.1.48.jar,android stuido&android studio自带模拟器 1.在mysql数据库中新 ...
- docker---设置镜像加速器
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器,国内很多云服务商都提供了国内加速器服务,如: Azure 中国镜像: https://dockerhub.azk8s.cn ...
- Code Style for OI
Code Style for OI #include #define 尽量少用 #include 能#include <foo>就不#include "foo" #if ...
- Lua与C++交互初探之C++调用Lua
Lua与C++交互初探之C++调用Lua 自从学习了lua这个脚本语言之后,无时不想着将他与c/c++联系起来,看看他真正的威力.奈何水平有限,网上找的代码无论怎样都无法运行成功.我知道是我少了某一步 ...
- 如何把word文档导入到数据库中——java POI
本文方法借鉴于https://www.cnblogs.com/ljysy/p/10574197.html 在经过朋友的指导下,在处理文档的方式上有所不同. 我的数据库使用的是SQL server,这篇 ...