前置芝士

  • 裴蜀定理
  • 同余的性质

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. 【深入浅出 Yarn 架构与实现】1-2 搭建 Hadoop 源码阅读环境

    本文将介绍如何使用 idea 搭建 Hadoop 源码阅读环境.(默认已安装好 Java.Maven 环境) 一.搭建源码阅读环境 一)idea 导入 hadoop 工程 从 github 上拉取代码 ...

  2. 畅联新增物联网设备接入协议:精华隆的NB一键报警

    这个是有点时间了,这里记录一下! ----------------------------------------------------------------------------------- ...

  3. 【Java并发007】原理层面:ReentrantLock中lock()、unlock()全解析

    一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQ ...

  4. 简单的sql注入3

    仍然 1 1' 1" 发现1'报错了.....我觉得作者对'情有独钟 再试试 1# 1'# 1"# 发现都可以正常登录 试试1' and '1'='1和1' and '1'='2发 ...

  5. ArcObjects SDK开发 003 宏观角度看ArcObjects SDK

    1.为什么要宏观上看ArcObjects SDK ArcObjects SDK库是一个非常庞大复杂COM组件集合,ArcGIS10.0有1000多个枚举.90多个结构体.5000多个接口以及4000多 ...

  6. day30-JQuery03

    JQuery03 4.jQuery选择器03 4.4表单选择器 应用实例 <!DOCTYPE html> <html lang="en"> <head ...

  7. 【书籍知识回顾与总结-2022】Java语言重点知识-多线程编程、流式编程

    一.多线程编程 二.流式编程 1.目的 简化集合和数组的操作 注意:每个流只能使用一次 2.获取流的方式 (1)单列集合:stream方法 KeySet()/values()/EntrySet() ( ...

  8. 【Java SE】Day08 String类、static关键字、Arrays类、Math类

    一.String类 1.概述 所有双引号字符串,都是String类的对象 字符串常量,会存在字符串常量池中 2.创建 构造函数--空构造.字符数组.字节(byte ASCII码)数组 3.常用方法-- ...

  9. QT+VS 调用基于Google Breakpad的跨平台Qt崩溃异常捕获调用方案

    方案一.基于Google Breakpad的跨平台Qt崩溃异常捕获调用方案 首先上博客:Windows下Qt生成dump文件并定位bug(基于qBreakpad) 这个地方使用的是一个叫qBreakP ...

  10. 如何让铁威马NAS可以通过互联网访问?

    当你在家或者出差去外地时候,可能要通过互联网访问你的TNAS设备,而使用远程访问功能,你可以随时随地访问你的TNAS 设备.读取你TNAS 中的文件或是对你的TNAS 设备进行配置.远程访问能给你的工 ...