当前位置: 首页 > news >正文

Acwing-基础算法课笔记之数学知识(扩展欧几里得算法)

Acwing-基础算法课笔记之数学知识(扩展欧几里得算法)

  • 一、扩展欧几里得算法
    • 1、裴蜀定理
    • 2、过程模拟
    • 3、代码模板
  • 二、线性同余方程
    • 1、定义
    • 2、模拟过程
    • 3、结论证明

一、扩展欧几里得算法

1、裴蜀定理

对于任意正整数 a a a b b b,那么一定存在非零整数 x x x y y y,使得 a x + b y = e x g c d ( a , b ) ax+by=exgcd(a,b) ax+by=exgcd(a,b)

2、过程模拟

例如求 g c d ( a , b ) gcd(a,b) gcd(a,b)

∙ \bullet b = 0 b=0 b=0 时,则可以直接返回 a a a 的值,即最大公约数,推理如下:

根据公式 a x + b y = e x g c d ( a , b ) ax+by=exgcd(a,b) ax+by=exgcd(a,b),得:

a × x + 0 × y = a a\times x+0\times y=a a×x+0×y=a

⇔ a × x = a \Lrarr a\times x=a a×x=a

⇔ x = 1 \Lrarr x=1 x=1

⇒ y = 0 \Rarr y=0 y=0

∙ \bullet b ≠ 0 b\not =0 b=0 时,求得扩展欧几里得算法 e x g c d ( b , a % b , y , x ) exgcd(b,a\%b,y,x) exgcd(b,a%b,y,x),推理如下:

b y + ( a by+(a by+(a m o d mod mod b ) x = e x g c d ( a , b ) b)x=exgcd(a,b) b)x=exgcd(a,b)

⇒ a \rArr a a m o d mod mod b = a − ⌊ a b ⌋ b b=a-⌊\frac{a}{b}⌋b b=abab

⇒ b y + ( a − ⌊ a b ⌋ b ) x = e x g c d ( a , b ) \rArr by+(a-⌊\frac{a}{b}⌋b)x=exgcd(a,b) by+(abab)x=exgcd(a,b)

⇒ a x + b ( y − ⌊ a b ⌋ x ) = e x g c d ( a , b ) \rArr ax+b(y-⌊\frac{a}{b}⌋x)=exgcd(a,b) ax+b(ybax)=exgcd(a,b)

3、代码模板

// 求x, y,使得ax + by = gcd(a, b)
int exgcd(int a, int b, int &x, int &y)
{if (!b){x = 1; y = 0;return a;}int d = exgcd(b, a % b, y, x);y -= (a/b) * x;return d;
}

Acwing-扩展欧几里得算法

二、线性同余方程

1、定义

给定 n n n 组数据 a i a_i ai b i b_i bi m i m_i mi,对于每组数求出一个 x i x_i xi,使其满足 a i × x i ≡ b i ( m o d a_i\times x_i\equiv b_i(mod ai×xibi(mod m i ) m_i) mi)

2、模拟过程

a = 2 a=2 a=2 b = 3 b=3 b=3 m = 6 m=6 m=6,此时以上并不满足条件。

a = 4 a=4 a=4 b = 3 b=3 b=3 m = 5 m=5 m=5,要使 4 x % 5 = 3 4x\%5=3 4x%5=3,所以 x = − 3 x=-3 x=3 x = 2 x=2 x=2

3、结论证明

a × x ≡ b ( m o d a\times x\equiv b(mod a×xb(mod m ) m) m)

⇔ \Lrarr ∃ y ∈ Z \exist y\in Z yZ,使得 a x = m y + b ax=my+b ax=my+b

⇔ a x − m y = b \Lrarr ax-my=b axmy=b

⇔ y ′ = − y \Lrarr y'=-y y=y

⇔ a x + m y ′ = g c d ( a , m ) \Lrarr ax+my'=gcd(a,m) ax+my=gcd(a,m)(条件: g c d ( a , m ) ∣ b gcd(a,m)|b gcd(a,m)b

http://www.lryc.cn/news/308598.html

相关文章:

  • 简单排列组合题(python版)
  • 【排坑】搭建 Karmada 环境
  • 每日一类:Qt GUI开发的基石《QWidget》
  • 人大金仓与mysql的差异与替换
  • Excel2LaTeX插件的使用、LaTeX表格
  • MySQL 用了哪种默认隔离级别,实现原理是什么?
  • 【C++初阶】第四站:类和对象(下)(理解+详解)
  • redis的基本数据类型(一)
  • Windows无法识别exFAT格式怎么办?
  • AI大模型的发展趋势?
  • List去除重复数据的五种方式
  • VUE3自定义文章排行榜的简单界面
  • 七通道NPN 达林顿管GC2003,专为符合标准 TTL 而制造,最高工作电压 50V,耐压 80V
  • 若依springboot接入feign踩坑记录
  • Lumerical Script ------ Error: <文件目录> line x:syntax error
  • Opencv基础与学习路线
  • Python装饰器的使用详解
  • 基于springboot+vue的党员教育和管理系统
  • 三个伪类让你的CSS代码更加优雅
  • 幻兽帕鲁联机服务器搭建
  • 京东商品优惠券API获取商品到手价
  • Flutter Version Manager (FVM): Flutter的版本管理终极指南
  • Docker技术概论(3):Docker 中的基本概念
  • 死记硬背spring bean 的生命周期
  • 海外网红营销策略:如何将红人粉丝有效转化为品牌忠实粉丝?
  • java之Bean对象
  • Flink——芒果TV的实时数仓建设实践
  • 卸载云服务器上的 MySQL 数据库
  • AUTOSAR SPI详解
  • SpringBoot快速入门(黑马学习笔记)