首页 > 其他分享 >同余方程学习笔记

同余方程学习笔记

时间:2023-05-09 11:13:09浏览次数:41  
标签:方程 gcd 特解 笔记 times cases 同余

一、裴蜀定理

裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数 \(a,b\) 和它们的最大公约数 \(d\),关于未知数 \(x\) 和 \(y\) 的线性不定方程(称为裴蜀等式):若 \(a,b\) 是整数,且 \(\gcd(a,b)=d\),那么对于任意的整数 \(x,y,ax+by\) 都一定是 \(d\) 的倍数。特别地,一定存在整数 \(x,y\),使 \(ax+by=d\) 成立。
它的一个重要推论是:\(a,b\) 互质的充分必要条件是存在整数 \(x,y\) 使 \(ax+by=1\)。

证明:如果 \(\gcd(a,b)>1\) ,两边同时除以 \(\gcd(a,b)\) 即可。

只需考虑 \(\gcd(a,b)=1\) 的情况,那么此时考虑集合 \(A={0,a,2\times a,……,(b-1)\times a}\),共 \(b\) 个数。

若 \(\exists i,j\in N,0\le i<j\le b-1,i\times a\equiv j\times a\pmod{b}\) ,则 \(b|(j-i)\times a\) ,因为\(\gcd(a,b)=1\),所以\(b|(j-i)\),而\(b<j-i\),所以此情况不成立。

所以 \(A\) 中的 \(b\) 个数 \(\bmod b\) 互不同余,故 \(\exists u\in N, a\times u \equiv 1 \pmod{b}\),则一定 \(\exists v\in N\),满足 \(b\times v+a\times u=1\)。□

二、同余方程的基本求解方法

首先将关于 \(x\) 的同余方程 \(a\times x\equiv c\pmod{b}\),变成一个二元一次不定方程 \(a\times x+b\times y=c\)。然后由于裴蜀定理,我们一定可以求出来一组满足 \(a\times x+b\times y=\gcd(a,b)\) 的解 \(x_0',y_0'\)。

然后如果 \(c\) 是 \(\gcd(a,b)\) 的整数倍,那么我们直接将 \(x_0',y_0'\) 乘以 \(\frac{c}{\gcd(a,b)}\) 就可以得到原方程的一组特解 \(x_0,y_0\) 了。否则原方程无解。

接下来就是通解。容易知道是 \(\begin{cases}x=x_0+k\dfrac{a}{\gcd(a,b)}\\y=y_0-k\dfrac{b}{\gcd(a,b)}\end{cases}\)。

所以我们的问题就转化为了求方程 \(a\times x+b\times y=\gcd(a,b)\) 的一组特解。

三、exgcd 算法

先给出代码。

inline void exgcd(ll &x,ll &y,ll a,ll b){
    if(!b){x=1;y=0;return;}
    exgcd(y,x,b,a%b);y-=a/b*x;
}

考虑一个让 \(a,b\) 辗转相除的过程。注意 \(a,b\) 会变,但是 \(\gcd(a,b)\) 不变,设为 \(g\)。

首先我们递归到底层,\(b=0\),那么此时 \(a=g\),那么我们就知道了一组特解:\(\begin{cases}x=1\\y=0\end{cases}\),因为 \(g\times 1+0\times 0=g\)。

然后是回溯,假设我们已经求出方程 \((a\bmod b)\times x+b\times y=g\) 的一组特解 \(\begin{cases}x=x_0\\y=y_0\end{cases}\) 了,那怎么求 \(a\times x+b\times y=g\) 的一组特解呢?

首先 \((a\bmod b)\times x_0+b\times y_0=g\),所以 \((a-b\times\lfloor\frac{a}{b}\rfloor)\times x_0+b\times y_0=g\),所以得到 \(a\times x_0+b\times (y_0-\lfloor\frac{a}{b}\rfloor\times x_0)=g\),所以 \(a\times x+b\times y=g\) 的一组特解是 \(\begin{cases}x=x_0\\y=y_0-\lfloor\frac{a}{b}\rfloor\times x_0\end{cases}\) 。

然后因为辗转相除,所以每一层到下一层时 \((a,b)\to (b,a\bmod b)\),所以 \((x,y)\to (y,x)\)。

然后我们就求出了方程 \(a\times x+b\times y=\gcd(a,b)\) 的一组特解了。时间复杂度 \(O(\log max\{a,b\})\)。

四、用途

  1. 求解二元一次不定方程的整数通解

  2. 求解同余方程

  3. 求逆元

    其实就是要求同余方程 \(a\times x\equiv 1\pmod{b}\) 的最小正整数解。

    为什么不用快速幂+费马小定理求呢?因为时间复杂度同样是 \(O(\log b)\) 的情况下,exgcd 的使用没有限制,而用快速幂+费马小定理要求 \(b\) 必须得是质数。

标签:方程,gcd,特解,笔记,times,cases,同余
From: https://www.cnblogs.com/qwq-qaq-tat/p/17383847.html

相关文章

  • 笔记本通过HDMI接口扩展显示器,微信/Outlook等界面模糊变清晰的解决办法
    1、笔记本扩展显示器,微信界面显示字体模糊如何解决?解决方案:第一步:鼠标右键打开微信快捷方式,选择‘属性’,找到‘兼容性’,选择‘更改高DPI设置’第二步:高DPI缩放替代:勾选✔‘替代高DPI缩放行为’第三步:点击“确定”。第四步:重新启动微信,微信界面的字体显示清晰了 2、问题......
  • vue中 vuex踩坑笔记-刷新后动态路由不渲染
    在vue中,vuex经常用于存储公共状态,特别是在登录的时候获取token再保存,这个时候如果是做的动态路由,由于vuex的特性在你刷新后会清除你的所有操作的存储。这时候,存储的token和动态路由都会被清掉。如何解决这个问题:1.结合session或者cookie(通常用这个),token保存的时候,除了在vuex中......
  • U-net结构学习笔记
    UNet++作者在知乎上进行了解读,里面还有视频的讲解,深入人心.里面有一句话令我印象深刻,我总结下:很多论文给出了他们建议的网络结构,其中包括非常多的细节,比如用什么卷积,用几层,怎么降采样,学习率多少,优化器用什么,这些都是比较直观的参数,其实这些在论文中给出参数并不见得是最好的,......
  • OpenGL学习笔记-3:编译shader报错: cannot convert from 'const highp float' to 'Frag
    报错信息: ERROR::SHADER_COMPILATION_ERRORoftype:FRAGMENTERROR:0:10:'assign':cannotconvertfrom'consthighpfloat'to'FragUserData4-componentvectorofhighpfloat'-------------------------------------------------......
  • Django笔记三十八之发送邮件
    本文首发于公众号:Hunter后端原文链接:Django笔记三十八之发送邮件这一篇笔记介绍如何在Django中发送邮件。在Python中,提供了smtplib的邮件模块,而Django在这个基础上对其进行了封装,我们可以通过django.core.mail来调用。以下是本篇笔记的目录:邮件配置项send_mail......
  • 02人月神话阅读笔记
    作为软件开发行业的经典之作,《人月神话》(TheMythicalMan-Month)已经影响了整个计算机领域的发展。作为一本关于软件项目管理的著作,《人月神话》通过作者FredBrooks几十年的管理实践和对于软件开发项目中某些惯常错误的深刻洞察,提出了一系列精辟的观点和理论,让读者可以更好地了解......
  • Spring学习笔记专题二
    (1)注解1,注解的作用:给Java结构添加标记;2,注解的使用:使用注解一般需要三方面参与:1,注解类;2,需要标记的目标类型;3,用于处理目标类型的处理程序;3,Retention:把注解保留的时机1,SOURCE:保留在源代码级别,一般供编辑器级别使用2,CLASS:保留到字节码级别,一般用编译器使用3,RUNTIME:保留到运行......
  • [李景山php] 20170504深入理解PHP内核[读书笔记]--第一章准备工作和背景知识--2
    第一节:环境搭建编译安装的关键点:配置编译安装环境,build-essential环境。1.1准备编译环境针对于ubuntu16.04下面建设编译安装环境:apt-getinstallbuild-essential1.2编译cd~/php-src./buildconf./configure–help#查看可用参数./configure–disable-all#编......
  • 【论文笔记】MacBert:Revisiting Pre-trained Models for Chinese Natural Language Pr
    文章目录相关信息摘要(Abstract)1.介绍(Introduction)2.相关工作(RelatedWork)3.中文预训练模型(ChinesePre-trainedLanguageModels)3.1BERT-wwm&RoBERTa-wwm3.2MacBERT4.实验设置(ExperimentSetups)4.1SetupsforPre-TrainedLanguageModels4.2SetupsforFine-tuningTask......
  • Java学习笔记(十一)
     1、请描述abstractclass和interface的区别?(1)实现方式抽象类是一个类,可以像普通类一样拥有属性和方法,但是它的部分方法没有具体实现,需要由子类来实现。抽象类使用关键字abstract来定义。在Java中,一个类只能继承一个抽象类。接口没有属性,只有方法和常量,所有的方法都是抽象的......