裴蜀定理

对于\(a,b\in N^*, x, y\in Z\),方程\(ax+by=k\)当且仅当\(gcd(a, b)|k\)时有解。

证明:

必要性显然。

充分性:只需证明当\(k=gcd(a, b)\)有解。

设\(s\)为令方程有解的最小\(k\)值,\(gcd(a, b) = d\),首先有\(d|s\)。

设$t = \lfloor \frac{a}{s} \rfloor,r = a \bmod s $

则\(r = a - t * s = a - (ax + by)*t = (1-tx)*a + byt\)

那么\(r\)也是\(a,b\)的线性组合,即存在\(x, y\)令\(ax + by = r\)有整数解。

又\(r \in [0, s)\)

\(\therefore r = 0\)

即\(s|a\),同理\(s|b\)。

\(\therefore s|d\),即\(s = d\)

证毕。


扩展欧几里得算法

​ 裴蜀定理告诉我们,方程\(ax + by = k\)当且仅当\(gcd(a, b)|k\)时存在无数组整数解。扩展欧几里得算法可以递归求出该方程的一组解,结合各组解之间的关系便有了解该方程的一般方法。

基于欧几里得算法的核心性质:\(gcd(a, b) = gcd(b, a \bmod b) (b \neq 0)\)

如果找到\(bx + (a \bmod b)y = d\)的一组解\(x_1, y_1\),并且通过待定系数法确定\(x,y\)和\(x_1, y_1\)的关系,我们就可以解出\(x, y\)了。

解:

对于方程\(dx + 0*y = d\)(边界),显然有一组解\((1, 0)\)

设\(gcd(a, b) = d\),对于方程\(ax + by = d\),我们递归求解得方程\(bx_1 + (a \bmod b)y_1 = d\)的解。

设\(\lfloor \frac{a}{b} \rfloor = q\),则\(a \bmod b = a - q * b\)

有\(bx_1 + (a - qb)y_1 = d\)

即\(ay_1 + b * (x_1 - qy_1) = d\)

对比系数得\(
x=y_1,y = x_1 - \lfloor \frac{a}{b} \rfloor * y_1\)。

​函数的递归结构由此确定,最终返回的为方程\(ax + by = gcd(a, b)\)的一组解\(x_0, y_0\)。

如果\(\frac{k}{d} = s\),那么\(x = sx_0, y = sy_0\)。

现在我们着手来考虑方程\(ax + by = k (gcd(a, b)|k)\)通解的形式。

不妨设通过扩欧得到的一组解为\(x_0, y_0\),任意解\(x = x_0 + \Delta x,y = y_0 + \Delta y\)

消元得\(a(x - x_0) + b(y - y_0) = 0\)

即\(a\Delta x = -b\Delta y\)

设\(a = pd, b = qd\)

则\(\frac{\Delta x}{\Delta y} = -\frac{q}{p}\)

最终得到通解的形式为\(x = x_0 + kq, y = y_0 - kp (k \in Z)\)

解毕。

代码:

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

【初等数论】裴蜀定理&扩展欧几里得算法的更多相关文章

  1. 欧几里得算法(gcd) 裴蜀定理 拓展欧几里得算法(exgcd)

    欧几里得算法 又称辗转相除法 迭代求两数 gcd 的做法 由 (a,b) = (a,ka+b) 的性质:gcd(a,b) = gcd(b,a mod b) int gcd(int a,int b){ ...

  2. 扩展欧几里得算法(EXGCD)学习笔记

    0.前言 相信大家对于欧几里得算法都已经很熟悉了.再学习数论的过程中,我们会用到扩展欧几里得算法(exgcd),大家一定也了解过.这是本蒟蒻在学习扩展欧几里得算法过程中的思考与探索过程. 1.Bézo ...

  3. 初等数论-Base-2(扩展欧几里得算法,同余,线性同余方程,(附:裴蜀定理的证明))

    我们接着上面的欧几里得算法说 扩展欧几里得算法 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式\(^①\): ax+by = gcd(a, b) =d(解一定存在,根据数论中的 ...

  4. 【bzoj5028】小Z的加油店 扩展裴蜀定理+差分+线段树

    题目描述 给出 $n$ 个瓶子和无限的水,每个瓶子有一定的容量.每次你可以将一个瓶子装满水,或将A瓶子内的水倒入B瓶子中直到A倒空或B倒满.$m$ 次操作,每次给 $[l,r]$ 内的瓶子容量增加 $ ...

  5. 【bzoj2257】[Jsoi2009]瓶子和燃料 扩展裴蜀定理+STL-map

    题目描述 给出 $n$ 个瓶子和无限的水,每个瓶子有一定的容量.每次你可以将一个瓶子装满水,或将A瓶子内的水倒入B瓶子中直到A倒空或B倒满.从中选出 $k$ 个瓶子,使得能够通过这 $k$ 个瓶子凑出 ...

  6. 【bzoj1441】Min 扩展裴蜀定理

    题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 输入 第一行给出数字N,代表有N个数 下面一行给出N个数 输出 S ...

  7. noip知识点总结之--欧几里得算法和扩展欧几里得算法

    一.欧几里得算法 名字非常高大上的不一定难,比如欧几里得算法...其实就是求两个正整数a, b的最大公约数(即gcd),亦称辗转相除法 需要先知道一个定理: gcd(a, b) = gcd(b, a  ...

  8. 『扩展欧几里得算法 Extended Euclid』

    Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ...

  9. 辗转相除法 & 裴蜀定理

    2018-03-11 17:39:22 一.辗转相除法 在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法.辗转相除法首次出现于欧几里得的&l ...

随机推荐

  1. Mybatis---03Mybatis配置文件浅析(一)

    一.写入mybatis配置文件的约束 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...

  2. 关于GIT配置公私钥

    问题:pull代码时显示 原因:公钥与私钥对不上,或者没有配置导致 解决: 1.生成私钥:TortoiseGIT → PuttyGen → Generate(点击后鼠标晃动会加速)→Save Priv ...

  3. JQuery如何实现统计图表

    EEP JQuery如何实现统计图表 讯光科技 前言 在ERP项目开发过程中,统计图表(chart)普遍应用于各种统计和报表中,其形象直观,内容清晰.EEP的JQuery网站项目使用了Easyui 插 ...

  4. 4-20mA转RS485模拟量采集模块是怎么工作的?

    4-20mA信号是工业上常用的模拟信号,用来表示温度,距离,速度,角度等参数. 如果需要用PLC或者工控机来采集,通常要转换成数字信号.这时可以采购远向电子生产的模拟量采集模块. 常用的模拟量采集模块 ...

  5. C++语言学习之STL 的组成

    STL有三大核心部分:容器(Container).算法(Algorithms).迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有S ...

  6. MySQL全面瓦解7:查询的过滤条件

    概述 在实际的业务场景应用中,我们经常要根据业务条件获取并筛选出我们的目标数据.这个过程我们称之为数据查询的过滤.而过滤过程使用的各种条件(比如日期时间.用户.状态)是我们获取精准数据的必要步骤, 这 ...

  7. 10 XSRF和XSS

    10 XSRF和XSS CSRF(Cross-site request forgery)跨站请求伪造 XSS(Cross Site Scripting)跨站脚本攻击 CSRF重点在请求,XSS重点在脚 ...

  8. 像用excel一样用pandas

    1 说明 预计需要15min阅读此教材: 本教材仅讲述如何查看excel数据,筛选,排序,查找替换数据,不涉及excel中复杂的图形绘制及样式修改. 2 假设 假设,已经存在一个test.xlsx文件 ...

  9. 企业中真实需要的集中管理软件SVN即Subversion版本控制

    一.SVN基本概念 SVN是Subversion的简称,是一个自由开源的版本控制系统. checkout: 把整个项目源码下载到本地 update: 从服务器上更新代码,使本地达到最新版本 commi ...

  10. 内网渗透 day12-免杀框架2

    免杀框架2 目录 1. IPC管道连接 2. 查看wifi密码 3. Phantom-Evasion免杀框架的运用 4. 自解压(sfx) 5. 数字签名 6. 资源替换 1. IPC管道连接 命名管 ...