前置芝士

  • 裴蜀定理
  • 同余的性质

exgcd

exgcd扩展欧几里得定理,常用来求解\(ax + by = gcd(a,b)\)的可行解问题

推导过程:

考虑我们有:

​ \(ax + by = gcd(a,b)\)——裴蜀定理

​ \(a_1x_1 + b_1y_1 = gcd(a_1,b_1)\)

当我们从\(1\)到\(2\)时,即\(gcd(a_1,b_1)\rightarrow gcd(a_2,b_2) = gcd(b_1,b_1\%a_1)\)

​ \(a_2x_2+ b_2y_2 = gcd(a2,b2)\Rightarrow b_1x_2 + (b_1\%a_1) y_2 = gcd(b_1,b_1\%a_1)\)

直到\(gcd(a_n,b_n)\ \ b_n = 0\)

​ \(a_nx_n+b_ny_n = gcd(a_n,b_n)\Rightarrow a_nx_n + 0 * y_n = gcd(a_n,0) = a_n\)

此时我们看出,\(x_n = 1,y_n = 0\)(\(y_n\)其实可以取任意一个数)时是一组特殊解

现在我们考虑怎么从\(n\rightarrow1\)推出我们需要的一组\(x,y\)

​ 从上面给出的例子,我们可以推出:

​ \(\because gcd(a,b) = gcd(b,a\%b)\)

​ \(\therefore a_1x_1 + b_1y_1 = b_1x_2 + (b_1-\lfloor\frac{b_1}{a_1}\rfloor\times a_1)y_2 = a_1y_2 + b_1(x_2-\lfloor\frac{a}{b}\rfloor y_2)\)

​ 然后我们可以推出:

​ \(\begin{cases}x_i = y_{i+1} \\ y_i = x_{i+1}+\lfloor\frac{a_i}{b_i}\rfloor y_{i+1}\end{cases}\)

​ solved!

下面附代码:

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

同余方程

​ 形如\(ax\equiv b(mod\ n)\)的方程称为同余方程,其中\(a,b,n\)给出,求出\(x\)

​ 我们按上面的方程可以化出这个式子\(ax+nk = b\)

​ 用\(exgcd\)求解即可

exgcd & 线性同余方程的更多相关文章

  1. POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]

    先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/68 ...

  2. POJ2115 C Looooops(线性同余方程)

    无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程: $$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} ...

  3. POJ1061 青蛙的约会(线性同余方程)

    线性同余方程$ ax \equiv b \pmod n$可以用扩展欧几里得算法求解. 这一题假设青蛙们跳t次后相遇,则可列方程: $$ Mt+X \equiv Nt+Y \pmod L$$ $$ (M ...

  4. POJ 2115 C Looooops (扩展欧几里德 + 线性同余方程)

    分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转 ...

  5. poj2115-C Looooops -线性同余方程

    线性同余方程的模板题.和青蛙的约会一样. #include <cstdio> #include <cstring> #define LL long long using nam ...

  6. 扩展欧几里得,解线性同余方程 逆元 poj1845

    定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b) int exgcd(int a,int b,int &x,int &y){ ){x=,y=;return ...

  7. HDU1573 X问题【一元线性同余方程组】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1573 题目大意: 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X ...

  8. luogu P1516 青蛙的约会(线性同余方程扩展欧几里德)

    题意 题解 做了这道题,发现扩欧快忘了. 根据题意可以很快地列出线性同余方程. 设跳了k次 x+mkΞy+nk(mod l) (m-n)kΞ-(x-y)(mod l) 然后化一下 (m-n)k+(x- ...

  9. codeforces 710D Two Arithmetic Progressions(线性同余方程)

    题目链接: http://codeforces.com/problemset/problem/710/D 分析:给你两个方程 a1k + b1 and a2l + b2,求在一个闭区间[L,R]中有多 ...

  10. 数论之同余性质 线性同余方程&拔山盖世BSGS&中国剩余定理

    先记录一下一些概念和定理 同余:给定整数a,b,c,若用c不停的去除a和b最终所得余数一样,则称a和b对模c同余,记做a≡b (mod c),同余满足自反性,对称性,传递性 定理1: 若a≡b (mo ...

随机推荐

  1. Java代码审计sql注入

    java_sec_code 该项目也可以叫做Java Vulnerability Code(Java漏洞代码). 每个漏洞类型代码默认存在安全漏洞(除非本身不存在漏洞),相关修复代码在注释里.具体可查 ...

  2. Idea在windows和mac中的一些快捷指令

    从 Windows 过度到 Mac 必备快捷键对照表 Mac 键盘符号说明 ⌘ == Command ⇧ == Shift ⇪ == Caps Lock ⌥ == Option ⌃ == Contro ...

  3. JMX port被占用

    JMX port被占用 解决方案 win+R打开DOS窗口,进入window命令,注意:要以管理员身份打开(快捷键:ctrl+shift+enter): 使用命令:netstat -aon|finds ...

  4. 自学 TypeScript 第一天 环境开发配置 及 TS 基本类型声明

    前言:  自学第一天,什么是TS ,为什么要用 TS TS 全程 Typed JavaScript at Any Scale 解释起来就是 添加了类型系统的 JavaScript, 是 JavaScr ...

  5. go如何编写命令行(cli)程序

    创建一个命令行程序 问题 如何使用golang创建可以在命令行当中传递参数的程序?go如何带参数执行程序? 比如我们期望使用hello -version来查看hello程序的版本号码.或者输入hell ...

  6. VM安装Centos7操作系统

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 视频教程:https://live.csdn.ne ...

  7. 【经验分享】配置用户通过Console口登录设备示例

    组网需求 当用户无法进行远程登录设备时,可通过Console口进行本地登录.缺省情况下,使用Console用户界面登录设备时只需要密码认证.为了防止非法用户登录设备,修改Console用户界面的认证方 ...

  8. UBOOT编译--- UBOOT的$(version_h) $(timestamp_h)(七)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 概述 在编译uboot的过程中,有两个特别的依赖version_h 和 timestamp_h,它们定义 ...

  9. VS 生成后事件中自动修改文件名插入当前时间

    目录 rename 指令 获取当前时间 将当前时间插入名字 rename 指令 VS 生成后事件中使用的是CMD 的语法 我们重命名使用的是Rename 简单用法如下: RENAME (REN) [d ...

  10. 关于CSDN博客上传图片的接口研究

    代码实现 import requests from requests_toolbelt import MultipartEncoder import urllib.parse fields = { ' ...