中国剩余定理学习

中国剩余定理( C R T CRT CRT)及其扩展( E X C R T EXCRT EXCRT)详解

基本形式

  • 中国剩余定理给出了以下的一元线性同余方程组的解:
    { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) \begin{cases} x \equiv a_1 \pmod{m_1} \\ x \equiv a_2 \pmod{m_2} \\ \qquad \vdots \\ x \equiv a_n \pmod{m_n} \end{cases} xa1(modm1)xa2(modm2)xan(modmn)
    在中国剩余定理中: a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an 是给定的余数, m 1 , m 2 , … , m n m_1,m_2,\ldots,m_n m1,m2,,mn两两互质,如果两两不互质则是扩展中国剩余定理。

前馈知识

  • 裴蜀定理

    • a x + b y = g c d ( a , b ) \ ax +by =gcd(a,b)  ax+by=gcd(a,b)
    • 关于未知数的 x x x y y y的线性二元不等式一定存在整数 x x x, y y y使其成立
    • 裴蜀定理的求解采用扩展欧里定理 e x g c d ( a , b , x , y ) exgcd(a,b,x,y) exgcd(a,b,x,y)
  • 扩展欧几里算法

    • 核心是 g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b) gcd(a,b)=gcd(b,a%b) 思路如下:

    • 第一层: a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b) ,递归到下一层, g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\% b) gcd(a,b)=gcd(b,a%b),同时向下传 x x x y y y,设为 x ′ x' x y ′ y' y

    • 第二层: b x ′ + a % b ∗ y ′ = g c d ( b , a % b ) bx'+a\%b*y'=gcd(b,a\%b) bx+a%by=gcd(b,a%b),我们可以把 a % b a\%b a%b表示为 a − ⌊ a b ⌋ b a-\lfloor\frac{a}{b}\rfloor b abab ,代入整理可得:
      a y ′ + b ( x ′ − a b y ′ ) = g c d ( b , a % b ) = g c d ( a , b ) = a x + b y ay'+b(x'-\frac{a}{b}y')=gcd(b,a\%b)=gcd(a,b)=ax+by ay+b(xbay)=gcd(b,a%b)=gcd(a,b)=ax+by
      比较可以得到第一层的 x x x y y y和第二层的 x ′ x' x y ′ y' y的关系为:
      x = y ′ , y = x ′ − a b y ′ x=y', y=x'-\frac{a}{b}y' x=y,y=xbay

    • 第二层的 x ′ x' x y ′ y' y由可以由第三层的 x ′ ′ x'' x′′ y ′ ′ y'' y′′代入同样的求得,在递归终点时,我们只需要让 x = 1 , y = 0 x=1,y=0 x=1,y=0即可。

      def exgcd(a,b,x,y):if b==0:return a,1,0d,x,y=exgcd(b,a%b,x,y)x,y=y,x-a//b*yreturn d,x,y
      
  • 逆元求解方法

    • 费马小定理

      • 费马小定理也就是用快速幂求解 q m i ( a , p − 2 , p ) qmi(a,p-2,p) qmi(a,p2,p),其中 p p p为质数

        def qmi(a,b,p):res=1%pwhile b:if b&1:res=res*a%pa=a*a%pb>>=1return res
        
    • 扩展欧几里得

      • p p p不为质数时不能用费马小定理
      • 扩展欧几里得求逆元也就是 e x g c d ( a , p , x , y ) exgcd(a,p,x,y) exgcd(a,p,x,y),得到最小的 x x x x % p x\%p x%p就是逆元

同余方程求解过程

  • 同余方程 a x ≡ c ( m o d b ) ax \equiv c\pmod{b} axc(modb) 可以化成一个二元一次不等式: a x + b y = c ax+by=c ax+by=c ,由整数解的充要条件是: g c d ( a , b ) ∣ c gcd(a,b)|c gcd(a,b)c ,假设 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d 可以用扩展欧几里得算法解出裴蜀等式 a x + b y = d ax+by=d ax+by=d的解,再乘上 c / d c/d c/d即可得到同余方程的一个特解(设为 x 0 x_0 x0 y 0 y_0 y0)。可以得到通解如下:

{ x = x 0 + b 1 t y = y 0 − a 1 t \begin{cases} x = x_0 + b_1t \\ y = y_0 - a_1t \end{cases} {x=x0+b1ty=y0a1t

​ 其中, a 1 = a g c d ( a , b ) , b 1 = b g c d ( a , b ) a_1 = \frac{a}{gcd(a,b)},b_1=\frac{b}{gcd(a,b)} a1=gcd(a,b)a,b1=gcd(a,b)b 。证明:将 x , y x,y x,y 代入 a x + b y = g c d ( a , b ) ax+by=gcd(a, b) ax+by=gcd(a,b) 可以发现还等于这个式子。

C R T CRT CRT问题的解决方法

  • CRT主要利用 m 1 , m 2 , … , m n m_1,m_2,\dots,m_n m1,m2,,mn 为两两互质的整数的性质。我们可以令:
    M = m 1 × m 2 × ⋯ × m n = ∏ i = 1 n m i M i = M / m i M=m_1 \times m_2 \times \dots \times m_n = \begin{equation} \prod_{i=1}^{n}m_i \end{equation}\\ M_i = M/m_i M=m1×m2××mn=i=1nmiMi=M/mi
    明显这里的 M i M_i Mi是和 m i m_i mi互质的。

  • 接着我们定义逆元:
    t i = M i − 1 t_i = M_i^{-1} ti=Mi1

  • 所以我们可以构造出一个解 x 0 x_0 x0
    x 0 = ∑ i = 1 n a i M i t i x_0 = \sum_{i=1}^{n}a_iM_it_i x0=i=1naiMiti

  • 解释 ∀ j ∈ [ 1 , n ] \forall j \in [1,n] j[1,n]
    { a j M j t j % m i = 0 j ≠ i a j M j t j % m i = a i j = i \begin{cases} a_jM_jt_j \% m_i = 0 \ \ \ \ \ \ j\neq i \\ a_jM_jt_j \% m_i = a_i \ \ \ \ \ j=i \end{cases} {ajMjtj%mi=0      j=iajMjtj%mi=ai     j=i

  • 通解就是 x = x 0 + k M x = x_0 + kM x=x0+kM,而CRT问题所求的最小整数解其实就是 a n s = x % M ans = x \% M ans=x%M

E X C R T EXCRT EXCRT问题的解决方法

  • m 1 , m 2 , … , m n m_1,m_2,\dots ,m_n m1,m2,,mn没有两两互质时就不能使用CRT了。

  • 观察下面的同余方程式子
    $$
    \begin{cases}
    x \equiv 2 \pmod{4} \
    x \equiv 4 \pmod{6}
    \end{cases}

    \Rightarrow x
    \equiv 10\pmod{12}
    $$

    { x ≡ 2 ( m o d 4 ) x ≡ 3 ( m o d 6 ) ⇒ ∅ \begin{cases} x \equiv 2 \pmod{4} \\ x \equiv 3 \pmod{6} \end{cases} \Rightarrow \emptyset {x2(mod4)x3(mod6)

    可以发现合同余方程在一定条件下是可以合并的,并且模数是原来模数的最小公倍数,当然也会出现无解的情况。

  • 合并流程

    • 假设前 k − 1 k-1 k1个同余方程合并得到新的方程为: x = r 1 ( m o d M ) x = r_1 \pmod{M} x=r1(modM) M M M是前 k − 1 k-1 k1个同余方程模数的最小公倍数,现在需要考虑合并第 k k k个方程: x = r 2 ( m o d m k ) x = r_2 \pmod{m_k} x=r2(modmk)

    • 对于前 k − 1 k-1 k1个同余方程,其通解为 x = r 1 + i ∗ M , i ∈ Z x=r_1+i*M,i \in Z x=r1+iM,iZ,接着在通解里面找到一个 t t t,使得 ( r 1 + t ∗ M ) % m k = r 2 (r_1+t*M) \%m_k=r_2 (r1+tM)%mk=r2,即可满足第 k k k个方程。那么合并后前 k k k个同余方程的通解就是
      x = r 1 + t ∗ M + i ∗ l c m ( M , m k ) , i ∈ Z x = r_1 + t*M + i* lcm(M,m_k), \ i \in Z x=r1+tM+ilcm(M,mk), iZ
      再对通解模 l c m ( M , m k ) lcm(M,m_k) lcm(M,mk) 即可得到新的 a n s ans ans作为前 k k k个同余方程的最小整数解。

    • 其中找 t t t的过程: M ∗ t + m k ∗ y = r 2 − r 1 M*t + m_k*y=r_2-r_1 Mt+mky=r2r1,其中 M M M就是裴蜀等式的 a , t a,t a,t就是裴蜀等式的 x x x,其中 r 2 − r 1 r_2-r_1 r2r1要满足 g c d ( M , m k ) ∣ ( r 2 − r 1 ) gcd(M,m_k)|(r_2-r_1) gcd(M,mk)(r2r1),否则无解。

    • 我们先用扩展欧几里得求解出 M ∗ t + m k ∗ y = g c d ( M , m k ) M*t + m_k*y=gcd(M,m_k) Mt+mky=gcd(M,mk),顺便求出 g c d ( M , m k ) gcd(M,m_k) gcd(M,mk),再将得到的解 t = t ∗ r 2 − r 1 g c d ( M , m k ) t = t* \frac{r_2-r_1}{gcd(M,m_k)} t=tgcd(M,mk)r2r1,即可求得 t t t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣209.长度最小的数组

力扣209.长度最小的数组 模版滑窗求最小 class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int n nums.size(),resn1;int sum 0;for(int i0,j0;i<n;i){sum nums[i];//尽可能缩小区间while(sum - nums[j] > target){sum - num…

[经验] 蝉联一词的含义是什么 #知识分享#职场发展

蝉联一词的含义是什么 蝉联这个词起源于古代中国&#xff0c;最初是指天子连续两年以上的年号相同。后来&#xff0c;这个词被用于形容某个人或某个团体连续多次获得某种荣誉或奖项的情况。在现代生活中&#xff0c;我们常常听到某个体育运动员蝉联冠军、某个企业蝉联业绩排行榜…

荆州餐饮环保在行动:清洗油烟净化器,守护城市环境

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在荆州&#xff0c;餐饮业不仅是美食爱好者的天堂&#xff0c;更是城市生活的重要组成部分。然而&#xff0c;随着餐饮业的发…

基于拓扑漏洞分析的网络安全态势感知模型

漏洞态势分析是指通过获取网络系统中的漏洞信息、拓扑信息、攻击信息等&#xff0c;分析网络资产可能遭受的安全威胁以及预测攻击者利用漏洞可能发动的攻击&#xff0c;构建拓扑漏洞图&#xff0c;展示网络中可能存在的薄弱环节&#xff0c;以此来评估网络安全状态。 在网络安…

科普|大数据风险检测对申贷人有哪些好处?

大数据风险检测可以极大地提高金融机构在用户肖像、反欺诈和信用评级等方面的效率和风险控制能力&#xff0c;这是金融企业发展过程中必须结合的一种科技技术。大数据风险检测覆盖信贷领域的所有流程&#xff0c;从客户获取到身份验证&#xff0c;再到信贷中和信贷后。因此&…

Ruby语言与Python:深度比较与独特魅力探索

Ruby语言与Python&#xff1a;深度比较与独特魅力探索 在编程语言的浩瀚海洋中&#xff0c;Ruby和Python无疑是两颗璀璨的明星。它们各自拥有独特的魅力和广泛的应用领域。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入探讨Ruby语言和Python的异同&#xf…

sudo快可以在Windows中使用了,以下是它的内容和使用方法

sudo命令受到Linux用户的尊敬。它允许你以另一个用户的身份运行命令,通常是管理员(或者Linux中的root用户),所以正如你所想象的,它几乎经常被开发人员、技术支持代理和系统管理员使用。现在,你可以在Windows中使用它! 为什么sudo如此受人尊敬 sudo命令允许你运行任务,…

电赛报告书写

一、总体要求 &#xff08;1&#xff09;摘要&#xff1a;一页&#xff0c;小于300字 &#xff08;2&#xff09;正文&#xff1a;不超过8页 &#xff08;3&#xff09;附录&#xff1a;可以没有&#xff0c;但是不能超过2页 二、摘要书写 摘要要小于等于300字&#xff0c…

使用kubectl apply deployment 支持指定deployment 的更新脚本

使用kubectl apply deployment &#xff0c;指定deployment&#xff0c;默认更新他第一个container的镜像&#xff0c;并且给出了更新该container某些env的样例&#xff1a; DEPLOYMENT_NAME"xxx" NAMESPACEXXX xxx_ENV_VALxxxx IMAGE_VERSIONV1.0 container_name&q…

实现飞书机器人推送消息到指定群组或者用户

实现飞书机器人推送消息到指定群组或者用户 1 简介2 创建飞书应用2.1 注册登录2.2 创建应用2.3 添加应用能力2.4 权限管理3 发布应用4 代码示例4.1 获取应用ID与token4.2 使用Python SDK4.3 简单示例4.4 获取用户或机器人所在的群列表4.5 通过手机号或邮箱获取用户 ID4.6 给群组…

生活使用英语口语柯桥外语学校成人英语学习

● “自来水”英语怎么说&#xff1f; ● “自来水”的英语表达是&#xff1a;Running water或者Tap water. 例句&#xff1a; There are hot and cold running water in all the bedrooms. 所有的卧室里都有冷热自来水。 ● “热水”英文怎么水&#xff1f; ● 我们不管…

C++设计模式——Adapter适配器模式

一&#xff0c;适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;用于将已有接口转换为调用者所期望的另一种接口。 适配器模式让特定的API接口可以适配多种场景。例如&#xff0c;现有一个名为"Reader()"的API接口只能解析txt格式的文件&#xff0c;给这…

【css3】png图片实现动态动画

.border_style {width: 400px;height: 400px;background-color: black;margin: auto;}keyframes sprite-animation {0% {background-position: 0 0;}100% {background-position: 0 -2064px;/* 假设每个图像的宽度为100px */}}.wrj_box {width: 86px;height: 86px;background-im…

Android的SELinux详解

标签: Android的SELinux详解; SELinux;Enforcing; Android的SELinux详解 概述 SELinux(Security-Enhanced Linux)是一个Linux内核模块和用户空间工具的集合,提供强制访问控制(MAC)机制。Android引入SELinux以增强系统的安全性,通过限制进程的权限来减少安全漏洞的…

STL中stack和queue模拟实现+容器适配器

目录 容器适配器 STL标准库中stack和queue的底层结构 deque的简单介绍 deque的缺陷 为什么选择deque作为stack和queue的底层默认容器 stack的模拟实现 queue的模拟实现 容器适配器 适配器是一种设计模式&#xff08;设计模式是一套被反复使用的&#xff0c;多数人知晓…

OpenAI模型规范概览

这是OpenAI对外分享的模型规范文档&#xff08;Model Spec&#xff09;&#xff0c;它定义了OpenAI希望在API接口和ChatGPT&#xff08;含GPT系列产品&#xff09;中模型的行为方式&#xff0c;这也是OpenAI超级对齐团队奉行的行为准则&#xff0c;希望能对国内做RLHF的同学有帮…

Photoshop 2024变换工具Ctrl+T不好使,以及自动清理透明色的问题

问题 Photoshop 2024变换工具CtrlT不好使&#xff0c;以及自动清理透明色的问题&#xff0c;不想重新下载了。 解决 编辑->首选项->常规->使用旧版自由变换。 如果发现变换还是会清除透明色就把文件重新放到这个已经打开的编辑窗口中&#xff0c;并且只有在变换的…

阿里云对象存储OSS简单使用

文章目录 概念基本概念Bucket 准备工作控制台操作对象存储OSSJava客户端操作对象存储OSS参考来源 概念 基本概念 阿里云对象存储 OSS是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供最高可达 99.995 % 的服务可用性。而且提供了多种存储类型&#xff0c;降低我…

SemiDrive X9H 平台 QT 静态编译

一、 前言 芯驰 X9H 芯片&#xff0c;搭载多个操作系统协同运行&#xff0c;系统实现了仪表、空调、中控、副驾多媒体的四屏驱动控制&#xff0c;在人车智能交互上可以通过显示屏、屏幕触摸控制、语音控制、物理按键控制、车身协议的完美融合&#xff0c;使汽车更智能。让车主…

算法:94. 二叉树的中序遍历

给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输出&am…